1 名前:名前は開発中のものです。 mailto:sage [2012/10/24(水) 03:01:09.64 ID:oI68Vzqz] ゲーム製作におけるC/C++全般に関するスレです。 元スレ DXライブラリ 総合スレッド その12 toro.2ch.net/test/read.cgi/gamedev/1330000532/ C/C++ゲーム製作総合スレッド Part1 toro.2ch.net/test/read.cgi/gamedev/1337516528/
201 名前:名前は開発中のものです。 mailto:sage [2012/11/13(火) 23:01:32.88 ID:k2b3NisB] auto_ptrってなんですか? どうしてunique_ptrを使わないんですか?
202 名前:名前は開発中のものです。 mailto:sage [2012/11/13(火) 23:02:03.36 ID:R7nFxA7+] c++11でdeprecated指定だって en.m.wikipedia.org/wiki/Auto_ptr なんかunique_ptrが代わりになるのかな?
203 名前:名前は開発中のものです。 mailto:sage [2012/11/13(火) 23:07:03.03 ID:k2b3NisB] スコープを抜けるときに自動で閉じるファイルポインタとか 例外いつ投げても閉じてくれるので便利ですね? std::unique_ptr<FILE, decltype(&fclose)> fp(fopen("filename", "r"), fclose);
204 名前:191 mailto:sage [2012/11/14(水) 00:25:26.13 ID:CmmzPOW9] >>192-194 最初から数が分かってるか、途中で増えるか等に応じて、 普通の配列、配列の動的確保、vectorあたりを使い分けるって感じかな?
205 名前:名前は開発中のものです。 mailto:sage [2012/11/14(水) 07:47:57.43 ID:f09Uuje+] vectorで実体まとめるとバッファのリサイズ発生した時にアドレス変わるんじゃない?
206 名前:名前は開発中のものです。 mailto:sage [2012/11/14(水) 08:50:51.27 ID:Za6Nl7tI] そんなの当たり前じゃん。
207 名前:名前は開発中のものです。 mailto:sage [2012/11/14(水) 08:58:13.52 ID:f09Uuje+] vectorで実体管理してソートのためにポインタのvector使ったら リサイズ発生した時点で参照変わるからちゃんと動かなくなるよね 最初に確保した分より増えないなら大丈夫だろうけど これ発生したら原因特定めんどくさそう
208 名前:名前は開発中のものです。 mailto:sage [2012/11/14(水) 09:06:59.91 ID:CmmzPOW9] あー、それもそうか。失敬
209 名前:名前は開発中のものです。 mailto:sage [2012/11/14(水) 15:05:59.50 ID:Za6Nl7tI] >>207 っていうか「Vectorで実体管理」がそもそも意味不明。 ポインタで管理してるならそれだけでいいじゃん。
210 名前:名前は開発中のものです。 mailto:sage [2012/11/14(水) 16:31:57.71 ID:OuQGweox] 確かにvectorにポインタいれときゃそれでdelete出来るな 自分でちゃんとdeleteするならそれで十分か
211 名前:名前は開発中のものです。 mailto:sage [2012/11/14(水) 17:44:55.77 ID:3cThVkCw] newしたポインタはとりあえずstd::unique_ptrかstd::shared_ptrに入れるべき deleteなんて自分で書いたら負けだぞ デストラクタもハンドル管理クラスみたいなの以外では自分で書いたら負け
212 名前:名前は開発中のものです。 mailto:sage [2012/11/14(水) 18:27:52.20 ID:lHOdfYqK] それは一般レベルの場合な 我々のように国家機密レベルでやってる場合は違う
213 名前:名前は開発中のものです。 mailto:sage [2012/11/14(水) 18:36:32.02 ID:5BbMRJco] 何に負けるんだよ 見えない敵と戦う労力こそが一番の無駄
214 名前:名前は開発中のものです。 mailto:sage [2012/11/14(水) 19:00:59.45 ID:3cThVkCw] 見えない敵というとメモリリークですね まあ、お遊びプログラムならすぐに終了されるので リークしても問題ないのかもしれませんが
215 名前:名前は開発中のものです。 mailto:sage [2012/11/14(水) 19:09:24.21 ID:3BI2eEEx] shared_ptrはvectorに入れても大丈夫なのか vector<shared_ptr<クラス>>でやっときゃ勝手に消えてくれそうだな
216 名前:名前は開発中のものです。 mailto:sage [2012/11/14(水) 19:15:38.28 ID:CmmzPOW9] >>211 十行くらいのブロックで、かつ外に出すつもりもないならnew/deleteで書いちゃうなあ
217 名前:名前は開発中のものです。 mailto:sage [2012/11/14(水) 19:28:19.33 ID:BbQiy07V] リークするのはお前の脳みそだけにしておけ
218 名前:名前は開発中のものです。 mailto:sage [2012/11/14(水) 19:32:08.10 ID:FHk4zIEt] うんまぁお前らも一番実感してると思うけど、自分のルールの一貫性を保つことが一番大事だからな もちろん柔軟に対応するのも大事だし柔軟に対応できるような構造にしておくことはもっと大事だが
219 名前:名前は開発中のものです。 mailto:sage [2012/11/14(水) 19:38:37.20 ID:3BI2eEEx] >>216 ブロックの外に出さないならローカル変数の方がよくない? 可変長だと無理かもしれんけど
220 名前:名前は開発中のものです。 mailto:sage [2012/11/14(水) 19:40:11.42 ID:3cThVkCw] 生ポインタの場合 A* a = nullptr; B* b = nullptr; try { a = new A(); b = new B(); doSomething(a, b); }catch(...){ if (a) { delete a; } if (b) { delete b; } throw; } delete a; delete b; std::unique_ptrを使う場合 std::unique_ptr<A> a(new A()); std::unique_ptr<B> b(new B()); doSomething(a.get(), b.get()); なぜわざわざ生ポインタを使おうとするのか、理解できない
221 名前:名前は開発中のものです。 mailto:sage [2012/11/14(水) 19:52:16.75 ID:3BI2eEEx] 生ポとは関係ないんだけど、例外処理ってしてる? tryは遅いらしいと何かでみたから基本投げっぱなしスープレックスなんだけど 実際どうなん?
222 名前:名前は開発中のものです。 mailto:sage [2012/11/14(水) 19:56:47.63 ID:aP39cEyY] 投げっぱなしだとexeが落ちちゃうだろ…(Windowsなら
223 名前:名前は開発中のものです。 mailto:sage [2012/11/14(水) 20:00:51.70 ID:K6TezrTK] 落ちなかったらバグったまま続いちゃうじゃん?
224 名前:名前は開発中のものです。 mailto:sage [2012/11/14(水) 20:45:10.81 ID:S4/fLXg9] なんでC++11前提で話してるのか理解できない
225 名前:名前は開発中のものです。 mailto:sage [2012/11/14(水) 20:49:59.82 ID:3cThVkCw] C++11じゃないならboostを使えばよろしい
226 名前:名前は開発中のものです。 mailto:sage [2012/11/14(水) 21:04:33.08 ID:KC8fJK0S] >>222 デバッグで例外が発生したら例外の原因箇所にチェック入れて防ぐように修正してる 基本は例外じゃなくて戻り値で成否を返すような感じ
227 名前:名前は開発中のものです。 mailto:sage [2012/11/14(水) 22:40:22.29 ID:FilUuDwR] スマートポインタの名前の長さは C++スタイルキャストを思い出す
228 名前:名前は開発中のものです。 mailto:sage [2012/11/15(木) 00:52:00.71 ID:CCQxRnc8] ふと思ったんだが、ゲーム・アプリのプレイ期間中に、 同一スコープ内でnewして解放する局面ってあるか? つうか、プレイ期間中じゃなくても、同一スコープ内で newして解放する局面って思いつかないな。 同一スコープ内なら、非ポインタのオブジェクト変数で済ませる。
229 名前:名前は開発中のものです。 mailto:sage [2012/11/15(木) 08:27:34.76 ID:kybbSnHR] コンストラクタに引数必須とか?
230 名前:名前は開発中のものです。 mailto:sage [2012/11/15(木) 13:27:32.69 ID:CCQxRnc8] >>229 変数定義に引数記述してもコンパイル通るよ。 class Test { public: Test(int arg); : }; int a = rand(); Test ins(a);
231 名前:名前は開発中のものです。 mailto:sage [2012/11/15(木) 13:44:36.27 ID:FiWT7kKo] >>230 出来るんだ… 考えてみれば出来ない理由もないか じゃあ>>203 みたいにポインタ返すけど、後始末は呼び出し側がやらないといけない関数とかかな? あとはスタックにデカイ領域作りたくないとか?意味があるかはわからんけど
232 名前:名前は開発中のものです。 mailto:sage [2012/11/15(木) 17:38:22.10 ID:CCQxRnc8] >スタックにデカイ領域作りたくないとか これはあるかもね。 とは言っても具体的な局面が思い浮かばない・・・
233 名前:名前は開発中のものです。 mailto:sage [2012/11/15(木) 19:13:59.62 ID:JDzb/9N7] スコープ抜けたら勝手に消えるだけがメリットじゃないだろう メンバ変数にしておけば親が死ぬとき勝手に死んでくれるし ていうかスマートポインタ使わないとコンストラクタで例外が発生した時どうするんだ
234 名前:名前は開発中のものです。 mailto:sage [2012/11/15(木) 20:24:55.99 ID:CCQxRnc8] 具体的にどんな例外を想定してるの?
235 名前:名前は開発中のものです。 mailto:sage [2012/11/15(木) 21:06:29.19 ID:JDzb/9N7] なんでスマートポインタを使うのを躊躇うの? unique_ptrは自動的にdeleter呼んでくれる上に 性能的には生ポと同じコストで使えるんだぞ
236 名前:名前は開発中のものです。 mailto:sage [2012/11/15(木) 21:15:04.36 ID:V2Q8QmNk] >>235 別に躊躇ってる人は居なくね?
237 名前:名前は開発中のものです。 mailto:sage [2012/11/15(木) 21:16:59.75 ID:/bYy5p67] なんかこの流れ前にも見たな 今話してるのはunique_ptr使うんだったら普通にautoで変数定義すればよくね? って所だと思うが
238 名前:名前は開発中のものです。 mailto:sage [2012/11/15(木) 21:17:12.28 ID:f9BWxP4M] なんでC++11やboost前提で話してるのか理解できない
239 名前:名前は開発中のものです。 mailto:sage [2012/11/15(木) 21:24:24.52 ID:V2Q8QmNk] この板的には、まだまだ11前提とするには厳しいかなー?
240 名前:名前は開発中のものです。 mailto:sage [2012/11/15(木) 21:37:01.79 ID:JeS5pTB2] 新しいもの好きなのはいいけど自分がマイノリティなのに気づけよ
241 名前:名前は開発中のものです。 mailto:sage [2012/11/15(木) 21:41:59.03 ID:JDzb/9N7] >>237 お前は何を言っているんだ スマートポインタと型推定は全然違う話だぞ >>239 STLすら厳しそうだ なぜだか自作ライブラリのほうが優れてるとか勘違いする奴が多いんだよな
242 名前:名前は開発中のものです。 mailto:sage [2012/11/15(木) 21:45:29.61 ID:JDzb/9N7] ゲーム開発とSTL ttp://d.hatena.ne.jp/masfj/20120308/1331220846 C++を知らないゲームプログラマ達 ttp://d.hatena.ne.jp/alwei/20111008/1318090538
243 名前:名前は開発中のものです。 mailto:sage [2012/11/15(木) 21:48:28.33 ID:Dmy8apjq] >>241 まず話の前提として>>228 があってそもそもnewする必要なくね?という問題提起があるんすよ あと型推定ってなんすか
244 名前:名前は開発中のものです。 mailto:sage [2012/11/15(木) 21:51:46.71 ID:V2Q8QmNk] autoには2種類あるから、そこですれ違ってるんじゃない?
245 名前:名前は開発中のものです。 mailto:sage [2012/11/15(木) 21:55:52.06 ID:Dmy8apjq] ごめん、c++11のautoと勘違いさせたか 俺が言ったのはただの自動変数のことです
246 名前:名前は開発中のものです。 mailto:sage [2012/11/15(木) 21:56:18.09 ID:V2Q8QmNk] >>241 >STLすら厳しそうだ >なぜだか自作ライブラリのほうが優れてるとか勘違いする奴が多いんだよな いや、既存ライブラリを使わない病気のじゃなくw
247 名前:名前は開発中のものです。 mailto:sage [2012/11/15(木) 21:56:44.58 ID:JDzb/9N7] スタックオーバーフローしないならnewする必要はないな でもスマートポインタの使い道ってそれだけじゃないよ? むしろクラスのメンバ変数にこそ使ってほしい デストラクタを自分で書くのはもうやめよう あと、C++11ではautoの意味が変わりました C#のvarみたいに変数の型を推定してくれるので STLのイテレータとか死にそうなくらい長い型名でも for(auto i = v.begin(), e = v.end(); i != e; ++i) { ... } こんな風に書けて超便利な機能です
248 名前:名前は開発中のものです。 mailto:sage [2012/11/15(木) 21:58:09.46 ID:JeS5pTB2] STLは慣れるまでは内部でどういう処理してるのかわからなくて気持ち悪い部分はあったな
249 名前:名前は開発中のものです。 [2012/11/15(木) 22:06:00.91 ID:AHySL0i4] 内部のことなんて知らなくていいんだよ 使い方を知ってれば、低能でも使えるのがSTL だからこそ意味がある
250 名前:名前は開発中のものです。 mailto:sage [2012/11/15(木) 22:11:50.11 ID:AKJanR6y] >>249 それでバグ出したらデバッグで死ねるな
251 名前:名前は開発中のものです。 mailto:sage [2012/11/15(木) 22:14:31.65 ID:JeS5pTB2] コード書き間違えるとたまにSTL内部のコードに誘導される時があるよな 記述ミスったところでエラー検知してくれよと言いたくなる あと気になるのはゲームだからだろうな 静的プログラムなら負荷が発生するパターンなんてどうでもいいけど、 動的プログラムだとそこら辺完全に把握してないと非常に気になる
252 名前:名前は開発中のものです。 mailto:sage [2012/11/15(木) 22:18:29.51 ID:CCQxRnc8] >>247 >むしろクラスのメンバ変数にこそ使ってほしい なぜ自動変数ではダメなん?
253 名前:名前は開発中のものです。 mailto:sage [2012/11/15(木) 22:25:11.84 ID:JDzb/9N7] STLだとメモリを自分で管理できないとか言ってる奴はいないか ttp://www.slideshare.net/alwei/ss-11521742 >>252 スタックオーバーフローしないならnewする必要はないな
254 名前:名前は開発中のものです。 mailto:sage [2012/11/16(金) 07:35:50.58 ID:wj9cLs/W] www22.atpages.jp/otsr/cgi-bin/src/otsr8520.jpg www22.atpages.jp/otsr/cgi-bin/src/otsr8521.jpg
255 名前:名前は開発中のものです。 mailto:sage [2012/11/16(金) 13:39:30.43 ID:BTfLhLXO] 絵柄と相まって小学生が好きそうなノリだなw
256 名前:名前は開発中のものです。 mailto:sage [2012/11/16(金) 16:46:04.64 ID:N1OcN+jA] vector配列のvector配列をvector配列で管理する三次元配列って開放する時大本だけ開放しておけばおk?
257 名前:名前は開発中のものです。 mailto:sage [2012/11/16(金) 17:19:36.14 ID:BTfLhLXO] vector<vector<vector<int> > > か? 実体さえ行方不明にならなければどうとでもなるが newしたものを格納してるならshared_ptrじゃないと危ないかもな
258 名前:名前は開発中のものです。 mailto:sage [2012/11/16(金) 18:07:16.53 ID:sOBt52RE] typedef shared_ptr<MapData> MapTip typedef vector<MapTip> Map1D typedef vector<Map1D> Map2D typedef vector<Map2D> Map3D
259 名前:名前は開発中のものです。 mailto:sage [2012/11/16(金) 19:28:23.88 ID:N1OcN+jA] ポインタじゃなくて実体を格納するなら大丈夫なのか クラスのメンバとしてコンテナ使ってると混乱してくる
260 名前:名前は開発中のものです。 mailto:sage [2012/11/16(金) 21:05:15.58 ID:JKxfRh2i] 別にポインタを格納しても何の問題もねえよ混乱しすぎ Actor* actor = MapTip[0][4][6]; a->Draw(); みたいなアホな事してないなら何の問題もない
261 名前:名前は開発中のものです。 mailto:sage [2012/11/16(金) 21:08:12.91 ID:N1OcN+jA] 混乱してるのはそこじゃねーよ!
262 名前:名前は開発中のものです。 mailto:sage [2012/11/16(金) 21:16:48.82 ID:JKxfRh2i] >>261 悪い、ちょっと想定がアレな上にアホな事コード(vectorのアドレス保存して云々が正しくアホなコード)も間違ってるというアレっぷり 実体なら問題はないが、個人的にはコピーコストが馬鹿みたいにかさむからshared_ptr推奨したいな メンバのメンバのメンバの...みたいに順々にデストラクタは働くので、実際にユーザーが使用した型であるvector<vector<vector<T>>>をclearすれば、Tのデストラクタがちゃんとしてるならば処理される
263 名前:名前は開発中のものです。 mailto:sage [2012/11/16(金) 21:28:55.22 ID:bHfLv1nY] 所有権を共有する必要はないのでunique_ptrを使いたいけど ポリモーフィズムに対応してないという弱点のせいでshared_ptrにせざるをえない
264 名前:名前は開発中のものです。 mailto:sage [2012/11/16(金) 21:37:31.95 ID:BTWHJeh/] ていうかunique_ptrってコピーしても大丈夫なん?
265 名前:名前は開発中のものです。 mailto:sage [2012/11/16(金) 21:56:59.63 ID:Tl4n6tnv] なんのゲーム作ってるのか誰も書かないではないか。
266 名前:名前は開発中のものです。 mailto:sage [2012/11/16(金) 21:59:18.17 ID:JKxfRh2i] >>264 unique_ptrはコピー不可能だよ moveは可 >>263 ポリモーフィズムに対応していない、とは……?? ideone.com/oD6tgf
267 名前:名前は開発中のものです。 mailto:sage [2012/11/16(金) 22:12:13.09 ID:bHfLv1nY] あれ、できるようになってる・・・? 前はva[1] = std::move(b);で怒られてた気がしたんだけど #include <memory> #include <vector> struct A { int val; A(int i):val(i){} }; struct B : public A { B(int i):A(i){} }; int main() { std::vector<std::unique_ptr<A>> va(2); std::unique_ptr<A> a(new A(1)); std::unique_ptr<B> b(new B(2)); va[0] = std::move(a); va[1] = std::move(b); for(auto& i : va) { printf("%d\n", i->val); } }
268 名前:名前は開発中のものです。 mailto:sage [2012/11/16(金) 22:48:49.93 ID:EdJd2yN1] すみません 質問です 1次元配列で使用可能な要素を前に詰める関数を書きたいのですがどういう方針で行ったら良いでしょうか? 例えば TestArray[8]があって、その関数実行後に |○|○|×|×|○|×|○|×| ↓ |○|○|○|○|×|×|×|×| のようにしたいのです どなたか良いアイデアをお持ちの方よろしくお願いします。
269 名前:名前は開発中のものです。 mailto:sage [2012/11/16(金) 22:51:01.79 ID:b7Jxtx/j] 普通にソートじゃだめなん?
270 名前:名前は開発中のものです。 mailto:sage [2012/11/16(金) 22:57:44.20 ID:bHfLv1nY] 安定じゃなくても良いなら for(;;) { 前から×を探す 後から○を探す swap 前と後ろが逆転したらbreak }
271 名前:名前は開発中のものです。 mailto:sage [2012/11/16(金) 22:58:20.10 ID:EdJd2yN1] >>269 1フレームで10以上呼ぶつもりなので出来るだけ高速な処理をしたいんです。 値の大小が無いだけで、ソートのようなプログラムになることは理解できるんですが・・・。
272 名前:名前は開発中のものです。 mailto:sage [2012/11/16(金) 22:58:32.75 ID:BTWHJeh/] 間つめたいだけじゃないの 普通に先頭から見てってつめればいんじゃない
273 名前:名前は開発中のものです。 mailto:sage [2012/11/16(金) 22:59:05.57 ID:JKxfRh2i] >>268 std::sort使って、比較関数だけ自前で書く >>270 std::sortを薦めろや…
274 名前:名前は開発中のものです。 mailto:sage [2012/11/16(金) 23:01:41.02 ID:BTWHJeh/] ソートだとO(nlogn)になるじゃん 間つめるだけならO(n)ですむ
275 名前:名前は開発中のものです。 mailto:sage [2012/11/16(金) 23:03:52.15 ID:N1OcN+jA] 今時ゲームにその程度の高速化必要か?
276 名前:名前は開発中のものです。 mailto:sage [2012/11/16(金) 23:07:21.91 ID:bHfLv1nY] そもそもなんでそんなことになるかな 途中の要素を削除するときは末尾の要素とswapしてから削除すれば良いだけだろ
277 名前:名前は開発中のものです。 mailto:sage [2012/11/16(金) 23:16:25.42 ID:JKxfRh2i] 出てるのに加えて使用可能と不可能で別のスタックでも使えばいいとか、色んな方法が考えられるな >>274 汎用のブツを使うべきだろ、高速化が必要な風にも見えんし 必要ならその時点で書きなおせばいい
278 名前:名前は開発中のものです。 mailto:sage [2012/11/16(金) 23:19:43.28 ID:EdJd2yN1] >>272 さんの言う通り普通に前から詰めます。ありがとうございました。
279 名前:名前は開発中のものです。 mailto:sage [2012/11/17(土) 04:14:11.89 ID:Yvb5b4+U] パフォーマンスを気にしたら、その分ゲームが完成から遠ざかる気がする 「できるだけ速く」ではなく、 「aaの環境でbbくらい時間がかかるが、ccくらいの時間にしたい」 が明確になるまでは、パフォーマンス気にしないほうがいんじゃね もちろん遅すぎて論外なことをやらない、って前提ありきだけど
280 名前:名前は開発中のものです。 mailto:sage [2012/11/17(土) 11:37:53.11 ID:aR98lbIK] 昔はSLGを遊ぶ場合、敵の思考モードに入るとそれだけで数分かかったものだよ
281 名前:名前は開発中のものです。 mailto:sage [2012/11/17(土) 16:54:20.20 ID:WXt99mEx] 数分?
282 名前:名前は開発中のものです。 mailto:sage [2012/11/17(土) 17:03:31.27 ID:N5wMv0H7] ・・・思考中デス・・・ 今じゃパターン総当りでもまったく気にならないからなー いい時代になったもんだ
283 名前:名前は開発中のものです。 mailto:sage [2012/11/17(土) 21:31:41.79 ID:lAYofdVH] 処理ごとの時間を測れるライブラリみたいのつくっておけばいいのに。 そうすれば、 遅くなりそうなところが、実際は、別のところがネックだったってのが わかるし、変に悩まなくてすむ。
284 名前:名前は開発中のものです。 mailto:sage [2012/11/17(土) 21:33:12.27 ID:N5wMv0H7] 普通に計測プログラム用意したり、処理の途中に時間計測して個別に比較したりするんじゃダメなん
285 名前:名前は開発中のものです。 mailto:sage [2012/11/17(土) 21:36:26.15 ID:wjcsv03f] プロファイラぐらい使えよ
286 名前:名前は開発中のものです。 mailto:sage [2012/11/17(土) 22:50:47.28 ID:4SSSv3ja] 俺のプロファイリングによるとこのスレの住人は10代から20代、もしくは30代から40代、50以上の年齢の男性あるいは女性 プログラミング自体には精通しておらず、文法を覚えている程度の初心者と思われるが、必ずしもそうとは言えない
287 名前:名前は開発中のものです。 mailto:sage [2012/11/17(土) 22:53:57.31 ID:FLG+6H3e] 最近は「素人が○○することは考えにくい」って言うんじゃないのか
288 名前:名前は開発中のものです。 mailto:sage [2012/11/17(土) 23:00:28.20 ID:4SSSv3ja] これか www.jiji.com/jc/zc?k=201210/2012101800773 バイナリからソースが外付けストレージにあったとか判るもんなのか
289 名前:名前は開発中のものです。 mailto:sage [2012/11/17(土) 23:09:23.72 ID:vLrNZqQF] 何らかの形でディレクトリのパスが入ることはあるだろうけど ストレージの種類までは記録されたりせんよ CやDじゃないから、ぐらいの根拠だろう
290 名前:名前は開発中のものです。 mailto:sage [2012/11/17(土) 23:15:36.55 ID:wjcsv03f] >>288 自分でコンパイル後のバイナリ確認してみ? パスは入ることもあるよ。 気になるならバイナリエディタ辺りで消せばいい。 動作に問題はない。
291 名前:名前は開発中のものです。 mailto:sage [2012/11/17(土) 23:45:04.79 ID:N5wMv0H7] 龍神録の館ですら説明してるし
292 名前:名前は開発中のものです。 mailto:sage [2012/11/18(日) 02:01:16.37 ID:a/mIzCX9] ボタンのクラス作ったんだけど class ButtonにDraw()関数にboolの戻り値つけて押されているか押されてないか判定するのってあり?
293 名前:名前は開発中のものです。 mailto:sage [2012/11/18(日) 03:37:14.26 ID:G8vKCtAR] 混乱するのでナシ 自分でちゃんと把握できるのなら挙動がすべてなのでどう書いてもいいが
294 名前:名前は開発中のものです。 mailto:sage [2012/11/18(日) 04:23:18.47 ID:OtH/PY93] ありがとう。ボタンクラスが、出来た! class Button{ POINT CoordUL,CoordDR;//右上、左上座標。 int m_nONButtonTexture;//押された時のテクスチャ番号 int m_nOFFButtonTexture;//押されてない時のテクスチャ番号 XMMATRIX m_Transform;//変形行列 public: void Draw();//画面上に描画。 //コンストラクタ。 Button::Button(int ulX,int ulY,int drX,int drY, int nONButtonTexture,int nOFFButtonTexture); //押されているかどうか。 bool PushCheck(int nMousePosX,int nMouseY); };
295 名前:名前は開発中のものです。 mailto:sage [2012/11/18(日) 04:33:06.01 ID:JhTLY1BD] C++では多少の粗は速度でカバーする!
296 名前:名前は開発中のものです。 mailto:sage [2012/11/18(日) 09:28:38.84 ID:1KRliL9g] まあ適当に作ってもそれなりに速度でるもんな コードに時間かけるよりバグ出さないような 設計、書き方に気を付けた方が幸せになれる jsでブラウザゲームとか作ってみたら遅すぎて泣けてくる
297 名前:名前は開発中のものです。 mailto:sage [2012/11/18(日) 09:42:02.13 ID:t3/vK/l2] 最近の女子小学生はブラウザゲームとか作るのか
298 名前:名前は開発中のものです。 mailto:sage [2012/11/19(月) 00:02:52.78 ID:xStQIj1y] 遅すぎると逆に萌えるなそれは。
299 名前:名前は開発中のものです。 mailto:sage [2012/11/19(月) 08:00:26.59 ID:Z7RVi5qW] ふええ、こんなにいっぱいしょりできないよお
300 名前:名前は開発中のものです。 mailto:sage [2012/11/20(火) 05:52:27.33 ID:JIlX6vOn] >>267 これ見てて思ったんだけど、 struct A と struct Bはそれぞれ非仮想の暗黙のデストラクタを持つじゃない。 すると std::vector<std::unique_ptr<A>> va(2) が破棄されるときには Aのデストラクタが呼ばれるよね。 #include <iostream> #include <memory> #include <utility> struct A{ int val; A(int i):val(i){}; }; struct C{ int dummy; }; struct B : private C,public A { // 多重継承を用いて vtbl の計算を複雑にする。 B(int i):A(i),C(){}; }; int main(int,char*[]){ std::unique_ptr<B> b( new B(10) ); std::cout << "\(^-^)/" << b->val << std::endl; std::unique_ptr<A> a(nullptr); a = std::move( b ); return 0; } (これは、わざと落ちるようstruct Cを入れて多重継承してみたんだけど、 問題はBのデストラクタは走らないよの部分) 暗黙のデストラクタって気にする?
301 名前:名前は開発中のものです。 mailto:sage [2012/11/20(火) 07:24:43.57 ID:JIlX6vOn] 暗黙のデストラクタって気にする?じゃ意味がつたわんないな。 多分 struct Aの定義は、割と普通にやるとおもう。 じゃあ Bを書いた時点でAを public 継承してるけどAには仮想のデストラクタが用意してないから、 B*をA*にキャストして、それをdelete したらこけるじゃん Aに仮想デストラクタを用意するように お願いするかAの継承をあきらめてメンバで持つようにするか B*を A* にキャストして、delete するのはだめよとココロの中でお願いするか選択肢が出てくると思うんだ。 main 書いてる最中も std::move の時点で、struct Aのデストラクタは、非仮想だから、 unique_ptr<A> の破棄時にstruct Bのデストラクタが呼ばれないなと気がつかないといけない と思うんだけど、正直最初、自分は全部スルーしてた。 暗黙のデストラクタは非仮想であることにみんなどのあたりで気がつくように訓練してる?