[表示 : 全て 最新50 1-99 101- 201- 301- 2chのread.cgiへ]
Update time : 06/11 19:17 / Filesize : 85 KB / Number-of Response : 355
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C/C++ゲーム製作総合スレッド Part1



1 名前:名前は開発中のものです。 mailto:sage [2012/05/20(日) 21:22:08.41 ID:iNm25OoA]
ゲーム製作におけるC/C++全般に関するスレです。

元スレ
DXライブラリ 総合スレッド その12
toro.2ch.net/test/read.cgi/gamedev/1330000532/

15 名前:名前は開発中のものです。 mailto:sage [2012/05/22(火) 00:27:01.91 ID:fGZyqonm]
「あたり判定判断クラス」にキャラクターのデータへのポインタを
「あたり判定判断クラスを保持するクラス」のコンストラクタで持たせた方がいいですか?

それとも

「あたり判定判断クラス」を保持せずに、
あたり判定の要求があったら
その場でインスタンス化して要求と一緒にキャラクターのデータへのポインタをもらった方がいいですか?

16 名前:名前は開発中のものです。 mailto:sage [2012/05/22(火) 03:06:37.64 ID:IEgsA2mw]
一体なんの話だ?

17 名前:名前は開発中のものです。 mailto:sage [2012/05/22(火) 08:40:25.25 ID:AbC1K/ic]
>>1
素人だけどたまに覗かせてもらうわ

>>15
文章が下手くそすぎてわからん
「データとその処理クラスはどう保持してる?」って訊きたいのか?
なら管理クラス作って両方保持させたらいんじゃね?

2D/3Dとライブラリとジャンルは書いた方が答えもらいやすいと思うぜ

18 名前:名前は開発中のものです。 mailto:sage [2012/05/22(火) 12:47:51.14 ID:O/bzOsDb]
今簡単なライブラリで3Dゲーム作るならDXよりseleneのがいいかな?

19 名前:名前は開発中のものです。 mailto:sage [2012/05/22(火) 13:46:35.52 ID:IEgsA2mw]
Siv3D待てるんじゃないか?ロジックだけ先に作っとけ

20 名前:名前は開発中のものです。 mailto:sage [2012/05/22(火) 14:12:03.81 ID:IEgsA2mw]
Siv3D待てるんじゃないか?ロジックだけ先に作っとけ

21 名前:名前は開発中のものです。 mailto:sage [2012/05/22(火) 17:28:48.14 ID:te9dNttw]
>>18
3Dをモデリングするツールが決まってるなら
対応してるライブラリを選んだほうが楽だと思う
大手有償ツールならツール名指しで対応してて安心だけど
シェアウェアやフリーはフォーマットに対応してても
読み込めなかったり制限があったり多いし


22 名前:名前は開発中のものです。 mailto:sage [2012/05/22(火) 17:37:05.40 ID:te9dNttw]
ついでに参考リンク

各種ライブラリ紹介スレ2
toro.2ch.net/test/read.cgi/gamedev/1177886529/
【2D&3D】ゲームグラフィックス【質問OK】
toro.2ch.net/test/read.cgi/gamedev/1209800609/
■3Dツール総合@ゲーム製作■
toro.2ch.net/test/read.cgi/gamedev/1094144808/


>>19
これどんなライブラリなの?
日本人が作ってるって事で興味深いな
公式サイトらしき所を見てもほとんど情報でてないね

23 名前:名前は開発中のものです。 mailto:sage [2012/05/22(火) 17:56:27.46 ID:te9dNttw]
>>6
画面遷移でわけてる

>>8
スレのタイトルっていわばインターフェースだと思うんだよ
目的に沿った質問をしやすいタイトルのスレは、ユーザビリティ向上に必須だと思う
だから、言語別・ライブラリ別にたくさんスレ立てたほうがいいと思う

>>10
あっちはあっち、こっちはこっちだよな
ム板や色んな板と連動とろうとすると矛盾でるから
こっちで完結していいと思う

>>15
ゲームによって違うんだろうけど
if (obj1->collision(obj2->collision()))
{
  /*hit!!*/
}
って感じがわかりやすいんじゃね

collision(obj1->pos, obj2->pos)
のほうが見やすいかな



24 名前:名前は開発中のものです。 mailto:sage [2012/05/22(火) 18:17:45.58 ID:ew4b5/bW]
俺は、以前まではそのように画面ごとで処理を分けてたけど今はもう全部同じにしちゃった。
「タイトル画面」というキャラを作って操作して、そこでステージセレクトを選ぶと
「ステージセレクト画面」というキャラを作って、それ以外のキャラを消す、とか。

こうすると新しい画面を作りたいときに、すぐに追加できて凄く楽だった。

一般的な方法かどうかは知らん。

25 名前:名前は開発中のものです。 mailto:sage [2012/05/22(火) 18:21:56.42 ID:eT4XUhop]
(どういう状況を想定してるのかがサッパリ分からない…)

26 名前:名前は開発中のものです。 mailto:sage [2012/05/22(火) 20:21:26.35 ID:uHnpkRvx]
シーン管理の話でしょ。

27 名前:名前は開発中のものです。 mailto:sage [2012/05/22(火) 21:40:46.06 ID:eT4XUhop]
そりゃ話の流れを考えれば分かるけど

28 名前:名前は開発中のものです。 mailto:sage [2012/05/22(火) 22:19:31.11 ID:4VM6HR6S]
>>19
そういえばそれあったね、忘れてた
見た感じ年内には出来そうだけど…

29 名前:名前は開発中のものです。 mailto:sage [2012/05/23(水) 10:44:09.36 ID:b4o10B2o]
人いるかな? クラスのメンバ構造体のポインタを引数に渡すとエラーを吐く。
何回やっても「CClass::TStructをTStructに変換できません」と起こるのよ。
助言求む。

30 名前:名前は開発中のものです。 mailto:sage [2012/05/23(水) 11:20:19.27 ID:b4o10B2o]
事故解決

31 名前:名前は開発中のものです。 mailto:sage [2012/05/23(水) 11:34:17.84 ID:a5ppZSNn]
おめ
何がどうなってどうしたかを書いてくれると情報共有できて助かる

32 名前:名前は開発中のものです。 mailto:sage [2012/05/23(水) 13:54:53.18 ID:su87BFwO]
typedef使ったのかな

33 名前:名前は開発中のものです。 mailto:sage [2012/05/23(水) 15:52:18.93 ID:b4o10B2o]
クラスのメンバ関数に同じメンバの構造体配列のポインタを渡して処理させようとしたんだけど、配列で同じメンバだったら要素を指定する値を渡せばいいだけだった。
目的は構造体(敵キャラクター)の情報をポインタで参照させてルーチンで動かすことだったんだけど、これに結構な時間を食われたわ。解決法は無理矢理だけどな
しかし、一人でゲ製はきついなあ。傍で優しく教えてくれる美少女プログラマが欲しい



34 名前:名前は開発中のものです。 mailto:sage [2012/05/23(水) 16:52:38.35 ID:a5ppZSNn]
よくわからんがこうしたって事?

class myData
{
};


class Hoge
{
Hoge(){}
~Hoge(){}
myData *arry[10];
void shori (int x){ arry[x]を弄る処理; };
};

35 名前:名前は開発中のものです。 mailto:sage [2012/05/23(水) 18:30:57.39 ID:3SO9CJHe]
まだ良く分からなくて想像妊娠だけど、typenameで根本解決するっぽい。

36 名前:名前は開発中のものです。 [2012/05/23(水) 22:24:42.87 ID:IjYu3jeM]
すいません、何度か過去に若干似たような質問をしてしまったのですがまとめたので改めて質問させてください。

クラスの配列メンバを、コンストラクタで動的に初期化(インスタンス化?)することはできるでしょうか?
コンストラクタに与えられた値の分だけの要素数を持った配列をメンバにしたいです。


37 名前:名前は開発中のものです。 mailto:sage [2012/05/23(水) 22:36:04.71 ID:wZno0p8L]
配列じゃなくてvectorをメンバに持てばいい
初期化子を使ってvectorのコンストラクタに値渡せばできる

class Hoge
{
std::vector<int> m_array;

Hoge(int num) : m_array(num){}
};

つーか、vectorなら後でどうこうできるから別にこんなことしなくていんだが



38 名前:名前は開発中のものです。 mailto:sage [2012/05/23(水) 22:48:10.25 ID:okQmDLbt]
>>36
動的に配列のメンバー変数のサイズを決める事はできないと思います。
擬似的な方法として以下ではどうでしょう?

1)テンプレートで要素数を指定する。
template<UINT n>class Hoge {
DATA data[n];
};

Hoge<3> hoge3;
Hoge<2> hoge2;

サイズが違うと違う型扱いになる。
Hoge<3>*で&hoge2は受け取れない(逆も)。

(2)データを配列で持たずポインターで持つ。
class Hoge {
explicit Hoge( UINT n ){ data = new DATA [n]; }
~Hoge(){ delete [] data; }

DATA* data;
};

Hoge hoge3(3);
Hoge hoge2(2);

Hoge*は&hoge2も&hoge3でも受け取れる。

39 名前:名前は開発中のものです。 mailto:sage [2012/05/23(水) 23:05:58.54 ID:IjYu3jeM]
>>38
コンストラクタの手前の装飾子と、UNITという定義はc++の機能なのでしょうか?
みた感じそれが1番わかりやすそうです。

40 名前:名前は開発中のものです。 mailto:sage [2012/05/23(水) 23:11:42.60 ID:IjYu3jeM]
>>37
stdは一個や二個使うんじゃなくて次作る時に一気に活用したいので・・・
すいません。今はめんどくさいです。

41 名前:名前は開発中のものです。 mailto:sage [2012/05/23(水) 23:25:09.30 ID:IjYu3jeM]
>>39
すいません、調べればわかることでしたね・・・

ただ、コンストラクタでインスタンス化してポインタに代入しても、
実体はコンストラクタのスコープの中だけで
コンストラクタが終わるとデータも無くなる・・・
ということはないのでしょうか?

42 名前:名前は開発中のものです。 mailto:sage [2012/05/24(木) 00:08:46.35 ID:h3LSjb5w]
ID:IjYu3jeMはmapを使いたいって言ってた人だろ?
諦めんなよ

43 名前:名前は開発中のものです。 mailto:sage [2012/05/24(木) 00:45:10.53 ID:mZT3BYan]
>>41
newで確保した領域はdeleteされるまで存在しますよ。
なのでデストラクタ―が呼ばれるまで大丈夫です。

気にしているのは、ポインターdataの寿命かと思いますが、
dataはクラスのメンバ変数なのでこちらも大丈夫です。

dataの初期化はコンストラクタの初期化子でも設定できるみたいです。
こちらの方が初期化として、意味的に正しいのだと思います。

Hoge( UINT n ) : data( new DATA [n] ){}



44 名前:名前は開発中のものです。 mailto:sage [2012/05/24(木) 06:29:42.60 ID:sYTZ8FZ7]
いろいろ環境や目的もあるだろうからあれだけど
std::vectorやstd::dequeを参照で渡すほうが遙かに楽だと思うぜ
まあイテレータの宣言はダラダラ長くてめんどくさいけど

45 名前:名前は開発中のものです。 mailto:sage [2012/05/24(木) 08:26:33.69 ID:qNAXiXfS]
C++11ならAutoさんが活躍

46 名前:名前は開発中のものです。 mailto:sage [2012/05/24(木) 09:19:00.25 ID:n/ZlLmSI]
>>43
とても参考になりました!
ありがとうございます!!

>>44
こっちのほうが楽じゃないですか?
自分の無知から来る疑問ですけど

47 名前:名前は開発中のものです。 mailto:sage [2012/05/24(木) 09:33:53.29 ID:AVLO1dG0]
絶対vectorのほうが楽。
new/deleteで神経質になる必要が無いし、配列サイズ変更も楽。
>>37でもいいし、漏れはコンストラクタで
Hoge(int num){m_array.resize(num,0);}
にする。引数の0は初期値。

あえてvector使わないときは、
せいぜい定数代わりの配列使うときくらいかな?

48 名前:名前は開発中のものです。 mailto:sage [2012/05/24(木) 10:20:14.62 ID:YnP/Ncq+]
自分を初心者だと思ってるうちは、STLを安易に使わないほうがいい。
中級者向け。

49 名前:名前は開発中のものです。 mailto:sage [2012/05/24(木) 11:53:20.03 ID:Mn2K1W8a]
STLこそ初心者向けだろw


50 名前:名前は開発中のものです。 mailto:sage [2012/05/24(木) 12:21:42.12 ID:sYTZ8FZ7]
>>46
ゲームだとこんな処理したくならない?

/** キャラクター一覧 */
int listUp( std::vector< MyCharacter >& v ) {
 if ( v.empty() ) {
  Message( "キャラクターがいません" );
  return 0;
 }
 int s = v.size();
 for( int i=0; i<s; ++i ) {
  Message( v[i].Name );
 }
 return v.size();
};

配列の操作を経験しとくのはいいことだと思うけど
リスク≒デバッグ負荷って面もあるしな
表記が長くなるって程度のめんどくささはあるけどね

51 名前:名前は開発中のものです。 mailto:sage [2012/05/24(木) 13:31:37.34 ID:YnP/Ncq+]
>>49
入門書にSTLが載っているが、それを理解したら入門者じゃないんだなw
とりあえずC++入門3分の1ぐらい読んで、作り始めちゃっているようなやつが初心者なわけで。


52 名前:名前は開発中のものです。 mailto:sage [2012/05/24(木) 14:00:10.53 ID:cjBLATMC]
Cの本なんてほとんど読んだ事もなくて、STL? vector? インスタンスとかメソッドとか何それ?
な状態でゲームを数本完成させた俺は初心者ですか中級者ですか。

53 名前:名前は開発中のものです。 mailto:sage [2012/05/24(木) 14:11:15.14 ID:0uzx/Lw1]
ゲームの内容や規模によるだろ
規模が大きくなるにつれて低レベルの処理が重要になるからSTLを選ぶかどうかが重要になる
小規模なら力技で何とかなるし



54 名前:名前は開発中のものです。 mailto:sage [2012/05/24(木) 15:26:20.14 ID:Mn2K1W8a]
STLを使うのは誰でもできるだろ。
あれと同じ機能のクラスを実装しろってんなら
中級以上じゃないと無理だが。


55 名前:名前は開発中のものです。 mailto:sage [2012/05/24(木) 15:34:03.30 ID:9WXEv1xv]
>>52
間違いなく初心者

56 名前:名前は開発中のものです。 mailto:sage [2012/05/24(木) 15:35:30.76 ID:/ghVU8JG]
>>52
他人に自分のコードを説明できなきゃ初心者
他人のコードを読めて理解できれば中級者

57 名前:名前は開発中のものです。 mailto:sage [2012/05/24(木) 18:15:50.25 ID:CY70W+Ee]
クラスの中に int main()

58 名前:名前は開発中のものです。 mailto:sage [2012/05/24(木) 18:37:54.09 ID:/ZaEqx4s]
初級者中級者ぐだぐだ言ってるやつは初心者に決まってるだろw


59 名前:名前は開発中のものです。 mailto:sage [2012/05/24(木) 20:00:14.96 ID:YnP/Ncq+]
STLは難しいとされてるのが一般的じゃないの?
そりゃプリミティブ型でpush_back()しか知らないで使うならいいけど、
コピーコンストラクタとかスマートポインタに関する
理解をもたないでやったら謎バグに嵌るのが目に見えるわ。

60 名前:名前は開発中のものです。 mailto:sage [2012/05/24(木) 20:11:52.79 ID:qNAXiXfS]
別に嵌っても良いんでない?
勉強になるし

61 名前:名前は開発中のものです。 mailto:sage [2012/05/24(木) 20:37:53.40 ID:9WXEv1xv]
スマートポインタはSTLじゃなくてboost使ったほうがいいよ。
スコープで一時的に使いたかったらunique_ptrでいいけど。

62 名前:名前は開発中のものです。 mailto:sage [2012/05/24(木) 20:49:46.55 ID:IK85TX04]
STL使うとバグに悩まされるけど、自前でlistだのmapを実装するとバグはないらしい

63 名前:名前は開発中のものです。 mailto:sage [2012/05/24(木) 20:55:53.89 ID:9WXEv1xv]
いやいやいや、そぉかぁ?www
昔のSTLならともかく、今はそれはないでしょーw

ゲームじゃないけど、業務にバリバリvectorとlistとsetとmap使って遭遇しなかったよ。
STLportだけど。



64 名前:名前は開発中のものです。 mailto:sage [2012/05/24(木) 20:59:05.52 ID:iewKyvkB]
>>62
妄想乙w


65 名前:名前は開発中のものです。 mailto:sage [2012/05/24(木) 21:03:23.03 ID:IK85TX04]
いや、>>59の主張を言い換えただけなんだが・・・

66 名前:名前は開発中のものです。 mailto:sage [2012/05/24(木) 21:09:15.76 ID:9WXEv1xv]
俺にはauto_ptrなどのスマーポインタをわけわからんで使ったときの挙動と解釈した。
STL自体のバグには言及してないっしょう。たぶん。

67 名前:名前は開発中のものです。 mailto:sage [2012/05/24(木) 21:14:13.92 ID:hIKRkdFB]
STLなんて、std::vectorとstd::mapにstd::string出し入れするだけなら、
解説サイトの例文をコピペするだけで使えるじゃん

コピペで定番の処理ができるものについては、
初級のうちからガンガンやっといていい

自分で考えるところが出てくるようなものは、多少プログラムに慣れるまでは
迂闊に手を出さないほうがいいかもしれないけど

68 名前:名前は開発中のものです。 mailto:sage [2012/05/24(木) 21:47:13.31 ID:YnP/Ncq+]
コピペおまじないプログラムだとこうなる
toro.2ch.net/test/read.cgi/gamedev/1330000532/796

69 名前:名前は開発中のものです。 mailto:sage [2012/05/24(木) 21:55:02.55 ID:8FH0wSaN]
仕様を理解せずに使えばどんなライブラリだってバグの温床になるよ。
問題は自分の不勉強をライブラリのせいにする無能さ加減。

原因追及は出来ないけどSTLを使うとバグるとか言う人間はその典型例。
きっちり検証した上で、ここの実装がおかしいとか指摘できるならその限りにあらずだけどね。

70 名前:名前は開発中のものです。 mailto:sage [2012/05/24(木) 23:31:08.11 ID:n/ZlLmSI]
newしたクラスのメソッドにアクセスして
テスト用の文字出力みて満足してデリートしないでウィンドウ閉じた
(´・_・`)

71 名前:名前は開発中のものです。 mailto:sage [2012/05/25(金) 00:11:59.72 ID:9i1PDVc5]
イテレータとか使い出したら初心者が混乱するのは分かるが、
vectorくらいなら初心者でもぽんぽん使っていいと思う。
インスタンス管理で躓くならstl云々ではなくてC++の勉強しなおしが要る。

>>70
あー、これどうなるんだろうな。
最近のOSだと良い感じにしてくれそうな感じはするが。

72 名前:名前は開発中のものです。 mailto:sage [2012/05/25(金) 01:55:38.79 ID:GIl7/nNl]
Bjarne Stroustrup インタビュー
www.kh.rim.or.jp/~nagamura/misc/stroustrup-interview.html

73 名前:名前は開発中のものです。 mailto:sage [2012/05/25(金) 05:50:35.88 ID:7a2EC8PQ]
>>70
>ウィンドウ閉じた
プロセスを閉じればプロセスで使っていたヒープは解放される。
つまりメモリリークはプロセスの内側のこと。




74 名前:名前は開発中のものです。 mailto:sage [2012/05/25(金) 07:37:23.51 ID:NHlde/d0]
碌に作ったことないけどmainクラスからtitleとかgameとか呼び出してその中でwhileループ、
クリアとかしたらmainに戻ってまた他の項目呼び出すのが簡単に出来そうだな

75 名前:名前は開発中のものです。 mailto:sage [2012/05/25(金) 18:21:37.17 ID:AwX4C6l5]
>>72
懐かしいパロディ

76 名前:名前は開発中のものです。 [2012/05/26(土) 14:19:42.97 ID:e8/fGbGH]
シーンクラスのコンストラクタに、シーンクラスのアドレスを保持するクラスのコンストラクタに渡すことはできるでしょうか?
また、する方法はどうしたらいいでしょうか?

↓イメージだとこんな感じです

class abc{
praivate:
 def* hoge;
public:
 abc(){
  def = new def(this*);
 }
 ~def();
};

class def{
praivate:
 abc* hogu;
public
 def(abc* tmp):hogu(tmp){}
};

77 名前:名前は開発中のものです。 mailto:sage [2012/05/26(土) 14:24:06.06 ID:U5Ue5qkT]
class defの前方宣言をclass abcの定義前に置く

78 名前:名前は開発中のものです。 [2012/05/26(土) 14:24:19.28 ID:lwTzxCQ6]
>>76
class abc{
の前に
class def;
を追加すれば出来る。

79 名前:名前は開発中のものです。 [2012/05/26(土) 14:35:04.98 ID:e8/fGbGH]
あ、順番間違えました

コンストラクタの引き数にthis*は、文法としてあってる?

80 名前:名前は開発中のものです。 [2012/05/26(土) 14:39:08.15 ID:lwTzxCQ6]
*thisに直すべし

81 名前:名前は開発中のものです。 [2012/05/26(土) 14:49:54.86 ID:e8/fGbGH]
>>80
ありがとう

82 名前:名前は開発中のものです。 mailto:sage [2012/05/26(土) 14:51:45.38 ID:jFmnTHnO]
thisでポインタ

83 名前:名前は開発中のものです。 mailto:sage [2012/05/26(土) 21:13:49.29 ID:U+nTXa0c]
>>77 >>78 できるか?
引数付きコンストラクタを宣言できないからダメだと思うが。

前方宣言すべきはabcのはず。
class abc;

class def{
public:
def(abc* pABC){}
};

class abc{
public:
abc(){
abc* pThis = this;
def* pDEF = new def(pThis);
}
};



84 名前:名前は開発中のものです。 mailto:sage [2012/05/26(土) 22:42:16.01 ID:U+nTXa0c]
.h と .cpp 分けるのは必須だな。

85 名前:名前は開発中のものです。 mailto:sage [2012/05/26(土) 23:10:07.09 ID:5tO+iNJs]
初心者を装って引っかけ質問してる臭い

>>83 正しいと思うが、俺ならテンプレート使いたくなるな

template < class T >
class Class1 {
 public:
  T * c2;
  Class1( T * caller ) { c2 = caller; };
  virtual ~Class1() {};
};
class Class2 {
 public:
  Class1<Class2> * c1;
  Class2() { c1 = new Class1< Class2 >( this ); };
  virtual ~Class2() { delete c1; };
};

連絡クラスか上位クラスで連携すべきだよね

86 名前:名前は開発中のものです。 mailto:sage [2012/05/27(日) 00:26:41.53 ID:ByeFImNB]
オンライン対戦ってどうやるんですか

87 名前:名前は開発中のものです。 mailto:sage [2012/05/27(日) 01:22:42.60 ID:jTp1UMkC]
C/C++関係ねえw

ネットワーク接続機能のあるライブラリ使う

88 名前:名前は開発中のものです。 mailto:sage [2012/05/27(日) 08:50:30.87 ID:2c7du0Oa]
DirectPlayとか。

89 名前:名前は開発中のものです。 mailto:sage [2012/05/27(日) 09:48:40.07 ID:Sq25nKDW]
VCって何年版がおすすめ?

90 名前:名前は開発中のものです。 mailto:sage [2012/05/27(日) 10:22:53.21 ID:DTmcX9vm]
C++11触りたいなら2010、それ以外は一長一短

91 名前:名前は開発中のものです。 mailto:sage [2012/05/28(月) 07:40:52.97 ID:uR2hVdYz]
オンラインはな…鯖がな…

92 名前:名前は開発中のものです。 mailto:sage [2012/05/28(月) 07:56:12.09 ID:RkjNhW6P]
いきなりですが2Dエフェクトってどういう作り方してますか?
数枚画像を用意して、あとはプログラム側で加工するのか、
元から透過画像とかを全部用意して表示するだけなのか…一般的なのはどれだろう

93 名前:名前は開発中のものです。 mailto:sage [2012/05/28(月) 08:10:15.29 ID:IVkwT0S2]
>>89
特に理由がなければ最新でいいと思うよ
古いバージョンだと色々と対応してなくて面倒

>>92
グラフィック用意して透過や加算で表示



94 名前:名前は開発中のものです。 mailto:sage [2012/05/28(月) 09:37:38.39 ID:8NkasfYy]
>>92
スピード的にエフェクト画像は元から用意しとくべき。
ランタイムでは位置とスケールと透過度を変えるくらいだな。


95 名前:名前は開発中のものです。 [2012/05/29(火) 00:47:50.68 ID:ajD2ZMcH]
marupeke296.com/TIPS_No13_ClassArrayInitialize.html
ここの一番下のplacement newを使ってクラス配列にコンストラクタを使いたいんですけど
一番下って動的に増減できないですよね?

クラスAのコンストラクタで、動的に他のクラスB配列(Bコンストラクタによる初期化機能付き)をインスタンス化するにはどうしたら良いでしょうか?

クラスBを、クラスAのコンストラクタの引数分、配列にしてメンバにしたいです。

96 名前:名前は開発中のものです。 [2012/05/29(火) 03:11:27.66 ID:ZvK6euHz]
ここの来ると
「寄ってくるな」「来るんじゃねえよ」

こないと、何故かちょっかいが来る

不思議なもんだ



97 名前:名前は開発中のものです。 mailto:sage [2012/05/29(火) 03:34:23.96 ID:ZvK6euHz]
ホモ本ばっかだけど
男だったんだっけか?

98 名前:名前は開発中のものです。 mailto:sage [2012/05/29(火) 04:04:39.91 ID:ZvK6euHz]
なんでBLなんだよ orz

99 名前:名前は開発中のものです。 mailto:sage [2012/05/29(火) 05:58:59.29 ID:WcnaYjLE]
>>95
動的に確保するなら、そもそもBの引数無しコンストラクタ使う必要ないんじゃない?
Aのコンストラクタの引数で配列のサイズ受け取って、
Aのコンストラクタ内でその分だけBを作ればいい

でも、メモリ管理面倒になるから普通にvector使ったほうが楽だよ

100 名前:名前は開発中のものです。 [2012/05/29(火) 08:36:02.60 ID:ajD2ZMcH]
>>99
Bを、Aのコンストラクタの中でBのコンストラクタに引き数を渡して、初期化をしたかったんですが
iniメソッドを別で作ったほうがいいですか?

101 名前:名前は開発中のものです。 [2012/05/29(火) 08:36:41.71 ID:ajD2ZMcH]
vector(´・ω・`)・・・

102 名前:名前は開発中のものです。 mailto:sage [2012/05/29(火) 09:06:33.41 ID:HdwzMGJO]
vectorでポインタ持たせた方がずっと良い。
動的なサイズ変更とか楽だし。
コンストラクタでnewしてデストラクタでdeleteすれば
別にインスタンス管理で悩むことも無いし。

103 名前:名前は開発中のものです。 mailto:sage [2012/05/29(火) 09:12:31.28 ID:WcnaYjLE]
>>100
Aのコンストラクタ内で
m_b = new B[size];
for (int i=0;i<size;i++)
 m_b[i] = B(b);
とすればいいと思うけど、俺なら確実にメモリリークする自信がある



104 名前:名前は開発中のものです。 mailto:sage [2012/05/29(火) 09:37:49.28 ID:8hClbexe]
>>103
sizeをconstにすれば大丈夫な気がしてきました!
ありがとうございます!

105 名前:名前は開発中のものです。 mailto:sage [2012/05/29(火) 11:11:05.67 ID:kEO6PQW4]
そもそも同じ引数でいいなら配列版のplacement newてのがあってだな
delete要らないったってデストラクタに意味があるとか使わなくなったから消したいときは
デストラクタとplacement deleteを両方呼ばなきゃいけないし
結論としてvector使え、管理面倒ならvector<shared_ptr<T> >

106 名前:名前は開発中のものです。 mailto:sage [2012/05/29(火) 11:31:41.26 ID:HdwzMGJO]
vectorだと要素数が固定じゃなくても、size()があるしね。
別のコンテナでもイテレータがあるし。
頑なにvector回避する理由なんて無いだろ。

107 名前:名前は開発中のものです。 mailto:sage [2012/05/29(火) 11:54:40.08 ID:0OI7v8Tb]
そもそもSTLを回避してる理由ってなに?

108 名前:名前は開発中のものです。 mailto:sage [2012/05/29(火) 13:18:32.52 ID:3ho6bi3y]
コピーコンストラクタが分かっていないとか、
デストラクタの呼ばれるタイミングを理解していないとか、
メンバのポインタがコピーされて二重解放するとか、
仕様を分かっていない馬鹿がバグを出すには十分だからだろう。
無能だからSTLを使わない、その理由に疑問の余地は微塵も無い。

109 名前:名前は開発中のものです。 mailto:sage [2012/05/29(火) 14:08:39.03 ID:ydqxZFnO]
言えてる気がする。
俺もどっちかっつーと馬鹿な方だから、STLが怖くて
自作のコンテナ使ってる。

出来合いのものを使った方が機能も多くて堅牢で
ずっと良いんだろうけどさ。

110 名前:名前は開発中のものです。 mailto:sage [2012/05/29(火) 16:51:46.79 ID:HdwzMGJO]
>>109
漏れも最初はそうだったけど、使い始めると一瞬で慣れるよ。
ググったら日本語で解説や使用例が山ほどヒットするのがデカイ。

111 名前:名前は開発中のものです。 mailto:sage [2012/05/29(火) 17:43:50.08 ID:uK14SeXM]
STLごときで上級者気取る奴は明らかに初心者

112 名前:名前は開発中のものです。 [2012/05/29(火) 17:47:49.24 ID:ajD2ZMcH]
>>103
これってコンストラクタ??
引き数を渡してるの?

113 名前:名前は開発中のものです。 mailto:sage [2012/05/29(火) 18:28:57.24 ID:WcnaYjLE]
>>112 >>103
Aのコンストラクタ内で、Bのコンストラクタに引数渡して初期化してる
m_b … Aのメンバ変数のBの配列
size … Bの配列のサイズ。Aのコンストラクタの引数とか
b … Bのコンストラクタの引数



114 名前:名前は開発中のものです。 mailto:sage [2012/05/29(火) 18:35:32.92 ID:ajD2ZMcH]
>>113
コンストラクタの返値を代入してるように見える・・・
「コンストラクタは特殊で、こういう使い方もできる」
って理解でいい?

115 名前:名前は開発中のものです。 mailto:sage [2012/05/29(火) 19:06:36.23 ID:CIJM7t3P]
一時オブジェクトをコピーコンストラクタでコピーしてる






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](*・∀・)<85KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef