[過去ログ]
C/C++ゲーム製作総合スレッド Part1 (1001レス)
C/C++ゲーム製作総合スレッド Part1 http://echo.5ch.net/test/read.cgi/gamedev/1337516528/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
リロード規制
です。10分ほどで解除するので、
他のブラウザ
へ避難してください。
1: 名前は開発中のものです。 [sage] 2012/05/20(日) 21:22:08.41 ID:iNm25OoA ゲーム製作におけるC/C++全般に関するスレです。 元スレ DXライブラリ 総合スレッド その12 http://toro.2ch.net/test/read.cgi/gamedev/1330000532/ http://echo.5ch.net/test/read.cgi/gamedev/1337516528/1
921: 名前は開発中のものです。 [sage] 2012/10/15(月) 12:35:20.53 ID:0j03j1xC 他のスレの話なら他のスレでやればいいのに 味方作って慰めてもらおうとしてるだけにしか見えないから http://echo.5ch.net/test/read.cgi/gamedev/1337516528/921
922: 名前は開発中のものです。 [sage] 2012/10/15(月) 13:28:26.77 ID:MkQLZqZt >>921 他のスレで荒れてたのを持ってきたというより、 C言語の仕様に関する話題になったので、こっちに持ってきたというのが正しいんじゃないかな http://echo.5ch.net/test/read.cgi/gamedev/1337516528/922
923: 名前は開発中のものです。 [sage] 2012/10/16(火) 22:35:57.67 ID:aSCmSzAL http://marupeke296.com/DXCLS_AutomationOfSaveLoad.html このサイトでデータのセーブとロードについて解説されているのですが、 これにvectorなどの可変長配列を利用することは可能でしょうか?(例えばゲーム内で手に入れたアイテムデータリストのセーブなど) 可変長配列のサイズを取得してセーブデータ自体のサイズ自体も可変長にすればできたり・・? http://echo.5ch.net/test/read.cgi/gamedev/1337516528/923
924: 名前は開発中のものです。 [sage] 2012/10/16(火) 22:54:11.21 ID:F/EzBMte やる方法はあるみたいだけど、しないほうが無難じゃないかなあ http://echo.5ch.net/test/read.cgi/gamedev/1337516528/924
925: 名前は開発中のものです。 [sage] 2012/10/16(火) 23:11:40.34 ID:jr04aFOT ロックマンみたいな横アクション作ってる人に聞きたいんだけど、カメラってどういう風に動かしてる? 縦にもスムーズに追跡したいんだけどキャラ中心にするとジャンプしただけでカメラが上下… かといってジャンプ時に縦に動かないようにすると下に落下してもカメラが追跡しない http://echo.5ch.net/test/read.cgi/gamedev/1337516528/925
926: 名前は開発中のものです。 [sage] 2012/10/16(火) 23:15:45.55 ID:F/EzBMte 画面中央を基準として遊びの領域を設定しておき、キャラがそこから出たら追従 http://echo.5ch.net/test/read.cgi/gamedev/1337516528/926
927: 名前は開発中のものです。 [sage] 2012/10/16(火) 23:23:33.78 ID:3tkTJIke 落下して端に到達したら暗転して次のマップ http://echo.5ch.net/test/read.cgi/gamedev/1337516528/927
928: 名前は開発中のものです。 [sage] 2012/10/16(火) 23:31:40.52 ID:Xisk+kv3 カメラなんて概念捨ててフレームバッファだけで考えた方が簡単だと思うよ http://echo.5ch.net/test/read.cgi/gamedev/1337516528/928
929: 名前は開発中のものです。 [sage] 2012/10/16(火) 23:47:14.62 ID:aSCmSzAL でも今の横スクロールアクションって進行方向にカメラが予め設置されてるよね http://echo.5ch.net/test/read.cgi/gamedev/1337516528/929
930: 名前は開発中のものです。 [sage] 2012/10/17(水) 02:18:31.53 ID:yEvPWQ+n レースゲームとかソニックのカメラってどうなってるの? 入力方向じゃないし、慣性方向でもなさそうだし、 かといって別にゴールの方向に常にカメラが向いてるわけでもないし http://echo.5ch.net/test/read.cgi/gamedev/1337516528/930
931: 名前は開発中のものです。 [sage] 2012/10/17(水) 02:34:39.42 ID:4eV5S9Vt 真似することを考えずにまずは自分なりの方法でやってみろ http://echo.5ch.net/test/read.cgi/gamedev/1337516528/931
932: 名前は開発中のものです。 [sage] 2012/10/17(水) 03:05:58.87 ID:zWpchkd8 >>928 ええと、どういうこと? http://echo.5ch.net/test/read.cgi/gamedev/1337516528/932
933: 名前は開発中のものです。 [sage] 2012/10/17(水) 08:13:27.75 ID:rnolp/E3 >>932 全部cpuのピクセル処理で頑張ってるんじゃね http://echo.5ch.net/test/read.cgi/gamedev/1337516528/933
934: 名前は開発中のものです。 [sage] 2012/10/17(水) 13:01:49.16 ID:yEvPWQ+n 昔はマリオとかのゲームってキー入力のチェックと現在の位置から、場面場面で全部のパターン予め決めておいて分岐させてるだけかと思ってた。 つまり1フレーム目で上下左右のどのキーが押されたかチェックして4パターン作っといて、さらにそこから分岐して次の2フレーム目は16パターン3フレーム目は64パターン http://echo.5ch.net/test/read.cgi/gamedev/1337516528/934
935: 名前は開発中のものです。 [sage] 2012/10/17(水) 14:08:13.50 ID:WIAhzCZQ >>934 1面だけで天文学的数字になるなw http://echo.5ch.net/test/read.cgi/gamedev/1337516528/935
936: 名前は開発中のものです。 [sage] 2012/10/17(水) 14:11:30.40 ID:zWpchkd8 >>933 どういうことだろう?と考えてみたが、みんな想定してる「カメラ」の定義がバラバラなのかもしれないと思った。 たぶん928が言ってる「カメラ」は3Dにおけるカメラなのかな。 >>934 想像したくねぇw http://echo.5ch.net/test/read.cgi/gamedev/1337516528/936
937: 名前は開発中のものです。 [sage] 2012/10/17(水) 20:40:55.96 ID:mciJv64M まあ、子供の頃は無茶な事を平気で考えるからな 俺の場合は、図形の組み合わせでプログラムが作れると本気で思ってた。 まあ最近、仕事でそれが出来るようなツールを知ったわけだが……UMLモデリングツールなんだけどな オブジェクト指向言語なら組み合わせて使えるから、欲しいんだけどな……ち〜と手が届かない http://echo.5ch.net/test/read.cgi/gamedev/1337516528/937
938: 名前は開発中のものです。 [sage] 2012/10/17(水) 20:44:02.80 ID:8GMmWMMd 俺はバイファムに出てきた戦闘シミュレータみたいなのは 俺が生きてる間には実現しないだろうなと思ってたよ……。 http://echo.5ch.net/test/read.cgi/gamedev/1337516528/938
939: 名前は開発中のものです。 [sage] 2012/10/18(木) 05:50:40.05 ID:H0txiXiD まさか家庭用ゲーム機がアーケードゲームの性能を超えるなんて 夢にも思わなかった。 http://echo.5ch.net/test/read.cgi/gamedev/1337516528/939
940: 名前は開発中のものです。 [sage] 2012/10/18(木) 08:09:54.05 ID:4FpajfD4 お前は何を言っているんだ http://echo.5ch.net/test/read.cgi/gamedev/1337516528/940
941: 名前は開発中のものです。 [] 2012/10/19(金) 21:15:01.53 ID:ySWLrrZA >>923 で紹介されてる http://marupeke296.com/DXCLS_AutomationOfSaveLoad.html ですが、ここで使われているDATA_LOCALマクロは、offsetofマクロと同じく 非POD型に対しては未定義のように思えます。 これをCSaveObjBase(仮想関数を持ってるので当然非POD型)や、その派生クラス (非POD型の派生は当然非POD型)に対して用いるのは、やっぱりいけてないと思われるのですが どうなんでしょうか http://echo.5ch.net/test/read.cgi/gamedev/1337516528/941
942: 名前は開発中のものです。 [sage] 2012/10/19(金) 22:49:35.05 ID:M4c+0Lno セーブするのはどうせプリミティブな型だけだからいいんでないの? http://echo.5ch.net/test/read.cgi/gamedev/1337516528/942
943: 名前は開発中のものです。 [sage] 2012/10/20(土) 02:53:53.20 ID:V8nr5/sM ちょっと調べてきた オフセットの取得部分がoffsetofの一般的な実装と同じなんだな offsetofに関するトピックはあったけど、いまいちわからん 多重継承するといかんのか? http://stackoverflow.com/questions/1129894/why-cant-you-use-offsetof-on-non-pod-strucutures-in-c オブジェクト内のメモリ配置がコンパイル時に決まるなら大して問題にならない気がするんだがどうなんだろ http://echo.5ch.net/test/read.cgi/gamedev/1337516528/943
944: 名前は開発中のものです。 [sage] 2012/10/20(土) 06:41:01.04 ID:s/RZO/oy >>943 Cならば->は単純なポインタの足し算だからコンパイル時に決定されるけど、 C++だと->はそうではないことがあるってことかね? 典型的な offsetof の記述はこうなので #define offsetof(type, mem) ((size_t) \ ((char *)&((type *)0)->mem - (char *)(type *)0)) VCで仮想継承 を持つときには、アロー演算子が仮想関数テーブルを見にいくけど、 この時 Windowsのユーザモードの場合は(ほとんどの場合)読み込み禁止ページを見にいって、 Access violationを発生させる。保護機構が無い環境だと、アドレス 0に仮想関数テーブル分 のオフセットを足したアドレスを仮想関数テーブルだとおもって、多分でたらめな値を返す。 http://echo.5ch.net/test/read.cgi/gamedev/1337516528/944
945: 名前は開発中のものです。 [sage] 2012/10/20(土) 10:04:42.33 ID:W2X4ug0e >(このアイデアはGame Programing Gems 3に記載されています。すばらしいですよね(^-^)) 出展が書かれてるから本屋が近くにあるなら 載ってる部分立ち読みしてきたらどうだろう。 てかおれもGems3みかけたら読んでみよっと http://echo.5ch.net/test/read.cgi/gamedev/1337516528/945
946: 名前は開発中のものです。 [sage] 2012/10/20(土) 14:58:04.14 ID:kepwCMlF C++は酷い言語だ。標準以下のプログラマの多くが使い、 はっきり言えば完全完璧な戯言を作ることが非常に簡単だという事実によって、 ますます酷くなっている。率直に言えば、たとえCの選択がただC++プログラマを立入らさせないためであるとしても、 それはそれでCを使う大いなる理由となろう。 http://slashdot.jp/journal/501622/C%2B%2B%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6Linus-Torvalds%E3%81%B8%E3%81%AE%E5%8F%8D%E8%AB%96 http://echo.5ch.net/test/read.cgi/gamedev/1337516528/946
947: 名前は開発中のものです。 [sage] 2012/10/20(土) 16:45:25.36 ID:qfzdsTSz >>946 日本語でおk http://echo.5ch.net/test/read.cgi/gamedev/1337516528/947
948: 名前は開発中のものです。 [sage] 2012/10/20(土) 19:32:10.35 ID:CKi8uHGH 2010年3月のネタを全く臆することなくドヤ顔で貼れる>>946さんチョーカッコイイ http://echo.5ch.net/test/read.cgi/gamedev/1337516528/948
949: 名前は開発中のものです。 [sage] 2012/10/20(土) 20:08:16.01 ID:sAj3jZd1 真のC++プログラマはdeleteを書かない http://echo.5ch.net/test/read.cgi/gamedev/1337516528/949
950: 名前は開発中のものです。 [sage] 2012/10/20(土) 22:06:28.72 ID:cYGMs3W8 パフォーマンスのため、未だにメンバ変数にアクセスするときは、いちいちローカル変数に置き換えていたり、 明らかに多態させた方がいいのに、仮想化を避けたり・・・ 確かに俺の場合、ゲームで使うときはなんかC++の爽快感がないなぁ 後者は今時のコンパイラなら上手いこと最適化してくれるんだっけ? http://echo.5ch.net/test/read.cgi/gamedev/1337516528/950
951: 名前は開発中のものです。 [sage] 2012/10/21(日) 05:42:47.55 ID:8o2Qx0nE 最適化もだが、そもそも今時のマシンはそのくらい気にする必要がないくらい速いだろ http://echo.5ch.net/test/read.cgi/gamedev/1337516528/951
952: 名前は開発中のものです。 [sage] 2012/10/21(日) 11:05:03.38 ID:2HisPjSj マシン性能におんぶにだっこで、できる改善をやらないのは、プログラマの行動じゃないと思う。 http://echo.5ch.net/test/read.cgi/gamedev/1337516528/952
953: 名前は開発中のものです。 [sage] 2012/10/21(日) 11:12:14.23 ID:VgVyyYQT じゃあ全部ハードウェアで実装しろ http://echo.5ch.net/test/read.cgi/gamedev/1337516528/953
954: 名前は開発中のものです。 [sage] 2012/10/21(日) 11:26:14.12 ID:utAVkLK4 改善というのは、できうる限りマシン性能におんぶにだっこさせることなんだが、 それがプログラマの行動じゃ無いというのは、いったいどれだけ愚か者なんだろう? http://echo.5ch.net/test/read.cgi/gamedev/1337516528/954
955: 名前は開発中のものです。 [sage] 2012/10/21(日) 11:29:52.39 ID:uEOq6DXM ハードに頼れない馬鹿なプログラマはクビだ http://echo.5ch.net/test/read.cgi/gamedev/1337516528/955
956: 名前は開発中のものです。 [sage] 2012/10/21(日) 11:40:08.93 ID:fWFEJkHx こいつらってハッカソンとか勉強会に参加してない低能なんだろ? http://echo.5ch.net/test/read.cgi/gamedev/1337516528/956
957: 名前は開発中のものです。 [sage] 2012/10/21(日) 12:06:12.30 ID:un2TMSqt できる改善というやつも 結局コーディングの手間と実行速度やリソース消費とのバランスだよな。 一概に言えるもんじゃない。 http://echo.5ch.net/test/read.cgi/gamedev/1337516528/957
958: 名前は開発中のものです。 [sage] 2012/10/21(日) 12:15:36.14 ID:/1IdSLkb あーよくいるよね、知識だけ溜めこんで実装できない奴 http://echo.5ch.net/test/read.cgi/gamedev/1337516528/958
959: 名前は開発中のものです。 [sage] 2012/10/21(日) 12:15:54.46 ID:uEOq6DXM わかる 俺も中二の頃はハッカソンとか勉強会に参加するだけでカッコいいと思ってたよ http://echo.5ch.net/test/read.cgi/gamedev/1337516528/959
960: 名前は開発中のものです。 [sage] 2012/10/21(日) 12:29:22.29 ID:PTum4Ngu C++を知らないゲームプログラマ達 http://d.hatena.ne.jp/alwei/20111008/1318090538 http://echo.5ch.net/test/read.cgi/gamedev/1337516528/960
961: 名前は開発中のものです。 [sage] 2012/10/21(日) 13:13:31.85 ID:smvmEgiA だれこいつ http://echo.5ch.net/test/read.cgi/gamedev/1337516528/961
962: 名前は開発中のものです。 [sage] 2012/10/21(日) 14:29:14.20 ID:2HisPjSj 例えば「この処理はハードがやってくれるからそっちに投げよう」というのはアリだろう。 けど「最近のPC処理能力ならできるだろうからやる必要はない」は相手の状況次第だろう。 相手が対象としてるPCが「最近の」だとは限らないし、作るゲームの規模も不明。 少なくともプログラム技術について語るスレで言うようなことじゃない。 http://echo.5ch.net/test/read.cgi/gamedev/1337516528/962
963: 名前は開発中のものです。 [sage] 2012/10/21(日) 15:22:10.49 ID:8o2Qx0nE 950からの流れでプログラム技術とか言っちゃう人って…… http://echo.5ch.net/test/read.cgi/gamedev/1337516528/963
964: 名前は開発中のものです。 [sage] 2012/10/21(日) 15:36:19.33 ID:VBPhaVkU 手を抜くための理由以上のモノではないしな http://echo.5ch.net/test/read.cgi/gamedev/1337516528/964
965: 名前は開発中のものです。 [sage] 2012/10/21(日) 18:48:08.69 ID:fR9B1EWl >>925が救われたのかが気になる スレチだろうけどな http://echo.5ch.net/test/read.cgi/gamedev/1337516528/965
966: 名前は開発中のものです。 [sage] 2012/10/21(日) 19:16:33.45 ID:9rCgavl9 >>950は素直にC使った方がいいんじゃないだろうか そんなところに拘っても可読性落ちるだけで プレイヤーには誤差にも感じない程度の差しかでないでしょ http://echo.5ch.net/test/read.cgi/gamedev/1337516528/966
967: 956 [sage] 2012/10/21(日) 21:43:51.38 ID:fWFEJkHx >>959 かっこいいって何? ハッカソンとかGame Jamにも足運んでるし CEDECとかにも毎年参加してるし いろいろな勉強会開いたりしてるよ? バンナム社員の人と会話とかしてTwitterでも話してるし ちなみに愛機はMBP(MacBook Pro)使ってるかな UDKで作ったゲームは東方風のシューティング あとはUnityとかもやってるしね あとこう見えてゲームは全くやらないかな(笑) 「ゲーム好き、ゲームヲタク」っていうのはゲーム開発に不要って言われてるからね 普段全くゲームをしない、所詮人が作ったゲーム、自分で作ってやるほうがおもしろいかな 好きなゲームは地球防衛軍、ストリートファイター4 ネトゲは韓国の利益になるからやらないかな http://echo.5ch.net/test/read.cgi/gamedev/1337516528/967
968: 956 [sage] 2012/10/21(日) 21:52:32.03 ID:fWFEJkHx 一応できる言語書くね C,C#,C++,Javascrip(Node.js),Coffeescript,Haskell,Eralng,Go,Scala,Python,Objective-C,OCaml,Scheme,LISP とか使えるね あとUnityの本とか全部そろえてるし 今はアンドロイドアプリ作ってるかな じゃんけんゲームみたいなやつ http://echo.5ch.net/test/read.cgi/gamedev/1337516528/968
969: 名前は開発中のものです。 [] 2012/10/21(日) 21:58:35.68 ID:70260In1 ここってプロフェッショナルレベルの人たちが集っていたのか http://echo.5ch.net/test/read.cgi/gamedev/1337516528/969
970: 名前は開発中のものです。 [sage] 2012/10/21(日) 22:02:03.60 ID:EmtRs25+ >>968 「使える」のレベルが低いことが用意に窺い知れる書き込みだな http://echo.5ch.net/test/read.cgi/gamedev/1337516528/970
971: 名前は開発中のものです。 [sage] 2012/10/21(日) 22:07:31.63 ID:9rCgavl9 >>968 はじめて見るのがいくつかあるな 俺もgimpのスクリプト書くのにschemeちょっとやったけど lisp系の言語ってどういう場面で必要になんの? やっぱりスクリプト? http://echo.5ch.net/test/read.cgi/gamedev/1337516528/971
972: 名前は開発中のものです。 [sage] 2012/10/21(日) 22:22:53.59 ID:koRq+7Oz lispはemacsの設定で使う場面しか思いつかないな http://echo.5ch.net/test/read.cgi/gamedev/1337516528/972
973: 名前は開発中のものです。 [sage] 2012/10/21(日) 22:42:29.46 ID:63szXM1n >>966 可読性が落ちるのは間違いないが、効果は誤差どころじゃないな・・・。 俺が950で挙げた前者は、みんなもやってるよね。 今時のコンパイラなら後者もOKなら、そろそろ観念してVS2012Pro買うかなぁと思ってさ。 http://echo.5ch.net/test/read.cgi/gamedev/1337516528/973
974: 名前は開発中のものです。 [sage] 2012/10/21(日) 23:43:39.06 ID:un2TMSqt プログラミングのスキルは手段であって目的じゃないからな。 自分の作りたいゲームが作れなければ全ては無意味だ。 http://echo.5ch.net/test/read.cgi/gamedev/1337516528/974
975: 名前は開発中のものです。 [sage] 2012/10/21(日) 23:51:38.77 ID:9rCgavl9 >>973 すいません、やってないっす… 関数細かく作るから同じメンバに何度もアクセスする箇所があんまりない ループする箇所はSTLにまとめてイテレーターでやっちゃってるな… もしかして、俺のコード超遅い? http://echo.5ch.net/test/read.cgi/gamedev/1337516528/975
976: 名前は開発中のものです。 [sage] 2012/10/22(月) 00:56:42.06 ID:z1W7+ZfO >>975 いやフレーム毎に収まれば正義ですし、可読性重視でいんでないですかね。 考えてみればExpressならすぐ使えたなと言うわけで、VS2012で試してみました。 うちの環境だと、基底から仮想関数で呼び出した場合に比べ、直で呼び出した場合は、 大体23%くらいの速度で行けるみたい。 最適化オプション色々変えてもあまり変わらず。 最新のコンパイラでも、やっぱり遅いみたいね・・・。 どうでもいいけど2012のUIかっこいいな。メトロというよりレトロだけど。 http://echo.5ch.net/test/read.cgi/gamedev/1337516528/976
977: 名前は開発中のものです。 [sage] 2012/10/22(月) 02:16:07.30 ID:bfhvnErC クラスインスタンスのdelete時に、Pure virtual function callのエラーが出て悩まされた。 純粋仮想関数持ってる親クラスのデストラクタに入ってから、その仮想関数を呼んでいることが原因だった。 http://echo.5ch.net/test/read.cgi/gamedev/1337516528/977
978: 名前は開発中のものです。 [sage] 2012/10/22(月) 02:24:37.14 ID:GibO9cqH deleteなんて自分で書くものじゃないし デストラクタもなるべく書かないほうが良い http://echo.5ch.net/test/read.cgi/gamedev/1337516528/978
979: 名前は開発中のものです。 [sage] 2012/10/22(月) 02:27:36.24 ID:F1nyTPCI 2012ってXPには未対応なんね http://echo.5ch.net/test/read.cgi/gamedev/1337516528/979
980: 名前は開発中のものです。 [sage] 2012/10/22(月) 04:33:45.61 ID:bfhvnErC >>978 そうなのか? 俺はdeleteもデストラクタも使い放題だぜ。 http://echo.5ch.net/test/read.cgi/gamedev/1337516528/980
981: 名前は開発中のものです。 [sage] 2012/10/22(月) 06:01:48.56 ID:87TUN/xt >>978 気になる。理由は? http://echo.5ch.net/test/read.cgi/gamedev/1337516528/981
982: 名前は開発中のものです。 [sage] 2012/10/22(月) 08:33:50.88 ID:19qPn/dP boostの参照カウンタ使えばdelete書かなくてもなんとかなる…かも? http://echo.5ch.net/test/read.cgi/gamedev/1337516528/982
983: 名前は開発中のものです。 [sage] 2012/10/22(月) 09:11:31.91 ID:wKQ4qRL6 >>982 移植の際にコンパイルエラー出たときの対応コストがboostは大きくつく。 ジャンルによってはカウンタ同期のコストが馬鹿にできないこともあるだろうし。 minmalなオレオレsmartptrを作っておくのが一番苦労しない気がする。 http://echo.5ch.net/test/read.cgi/gamedev/1337516528/983
984: 名前は開発中のものです。 [sage] 2012/10/22(月) 15:22:28.62 ID:buj+NpWL #include <iostream> #include <vector> #include <string> int main(){ std::vector<std::string> Strings; std::vector<int> Vector; Strings.push_back("1-2-3-4-5"); Strings.push_back("9-7-8"); Strings.push_back("6"); for(unsigned int i = 0; i<Strings.size(); i++){ //VectorにStringsの文字列を正規表現等で格納したい } return 0; } Stringsに格納した文字列を正規表現で数字だけ取り出してVectorに格納したいのですが 正規表現はどうかけばいいのでしょうか? Vectorを[1,2,3,4,5,9,7,8,6]といった具合です。 よろしくお願いします。 http://echo.5ch.net/test/read.cgi/gamedev/1337516528/984
985: 名前は開発中のものです。 [sage] 2012/10/22(月) 18:04:08.05 ID:bfhvnErC 誰が調べてあげてたもれ http://echo.5ch.net/test/read.cgi/gamedev/1337516528/985
986: 名前は開発中のものです。 [sage] 2012/10/22(月) 18:38:31.04 ID:yaXLi6zV 試してないけどboost::regex_grepに\\d+を突っ込むんじゃダメかな http://echo.5ch.net/test/read.cgi/gamedev/1337516528/986
987: 名前は開発中のものです。 [sage] 2012/10/22(月) 19:30:48.30 ID:GibO9cqH deleteを自分で書くな std::unique_ptrを使え ノーコストのスマートポインタだ スコープから抜けるときに自動的にdeleterを実行してくれる std::unique_ptrが使えない場面では仕方ないのでstd::shared_ptrを使え 多態が必要なときはstd::shared_ptrじゃないとダメだった気がする デストラクタを書くのはスマートポインタで自動的に解放できないリソースを扱うクラスのときだけだ 例えば、OpenGLのテクスチャオブジェクトとかな だがFILEオブジェクトなんかはdeleterにfcloseを指定すればスマートポインタで自動解放可能だ メンバ変数の解放はメンバ変数のデストラクタに任せて自分で解放しようとするな 抱合した子オブジェクトは親が死んだときに勝手に死ぬし newしたオブジェクトはスマートポインタに入れとけば勝手に死ぬ 自分でdeleteする必要がある場面なんてまずないだろう http://echo.5ch.net/test/read.cgi/gamedev/1337516528/987
988: 名前は開発中のものです。 [sage] 2012/10/22(月) 20:05:28.33 ID:YuwwqXlf >>984 strtokでググれ http://echo.5ch.net/test/read.cgi/gamedev/1337516528/988
989: 名前は開発中のものです。 [sage] 2012/10/22(月) 20:11:20.29 ID:bfhvnErC でもさ、 あるクラスをアプリ実行期間中、存続させつつづけて、 ゲーム・ステージの切り替わりのタイミングで、 それが持つ配列型メンバをリサイズする場合なんかには deleteを使わざるを得ないんじゃないか? こういうケースは頻繁にあるんだが。 全ステージ配列のサイズは固定とか縛り持たせるわけでもあるまい。 http://echo.5ch.net/test/read.cgi/gamedev/1337516528/989
990: 名前は開発中のものです。 [sage] 2012/10/22(月) 20:20:24.89 ID:GibO9cqH スマートポインタのvectorを使いなさい あと、いまどき生配列はないな 固定長配列ならstd::array、可変長ならstd::vectorを使いなさい Visual C++でデバッグモードでコンパイルすれば、範囲外アクセスしたときに例外投げてくれるはずだ http://echo.5ch.net/test/read.cgi/gamedev/1337516528/990
991: 名前は開発中のものです。 [sage] 2012/10/22(月) 20:56:00.85 ID:bfhvnErC 相互に関連していて、deleteでトリガーされるデストラクタの実行順を気にしなきゃいけない時もあるよ。 またブラックボックスな配列ってのは、リサイズ後のメモリアクセス効率性への影響が不安じゃない。 http://echo.5ch.net/test/read.cgi/gamedev/1337516528/991
992: 名前は開発中のものです。 [sage] 2012/10/22(月) 21:12:58.91 ID:yaXLi6zV それなりに寿命が短くて、確実に管理できるなら new/deleteの方が楽よね http://echo.5ch.net/test/read.cgi/gamedev/1337516528/992
993: 名前は開発中のものです。 [sage] 2012/10/22(月) 21:21:39.03 ID:oFyoxOqU >>991 例えばこういう循環参照を持つやつだよね。 struct B; struct A{ B* b;}; struct B{ A* a;}; こういうときは、生存期間の管理用に一つ使い捨てのクラスを用意して、 struct C{ A a; B b; C():a(),b(){ a.b = &b; b.a = &a; }; // 循環してるポインタをセット ~C(){} // デストラクタで a と b が 同時に破棄されるようにする。 }; // struct C自体はスタックか std::unique_ptr<C> にまかす。 デストラクタが走るときはコンストラクタと逆の順番だから、循環参照してて デストラクタの実行順番を気にしないといけないような状態の場合はそれ自体を struct Cのデストラクタに封じ込めるのはどうだろう。 http://echo.5ch.net/test/read.cgi/gamedev/1337516528/993
994: 名前は開発中のものです。 [sage] 2012/10/22(月) 23:30:02.44 ID:GibO9cqH オブジェクトへの参照を保持していることとオブジェクトを所有していることは別だと思うんだ 例えば木構造でなるべくメモリを局所化したい場合だとこういう感じになると思う class Node { Node* firstChild; Node* sibling; Node* parent; }; std::vector<Node> vNode; この場合、Nodeは他のNodeへの参照を持ってるけど、所有しているわけじゃない 所有しているのはvNodeを持つオブジェクトだ あれこれって>993と同じことじゃね http://echo.5ch.net/test/read.cgi/gamedev/1337516528/994
995: 名前は開発中のものです。 [sage] 2012/10/23(火) 00:04:00.65 ID:jziPb4Rf weak_ptrを使うのだてめえら http://echo.5ch.net/test/read.cgi/gamedev/1337516528/995
996: 名前は開発中のものです。 [sage] 2012/10/23(火) 01:15:06.83 ID:lf4QviES class Task { Task* m_pNext; Task* m_pPrev; bool m_Head; //デク先頭フラッグ bool m_ToBeDeleted; //削除フラッグ virtual void Exec()=0; // }; class Filament : public Task { //m_EntryPointにTaskクラスをつなげる。 Task m_EntryPoint; //デク先頭 ~Filament() { //親delete時に、連鎖的にdeleteする子の削除フラッグを立てる。 Task* child = m_EntryPoint.m_pNext; while (!child->m_Head) { child->m_ToBeDeleted=true; child = child->m_pNext; } }; }; class Fiber : public Filament {...}; //m_EntryPointにFilamentクラスをつなげる。 class Synthesis { Fiber* fibers_active[4]; }; //1次元配列。参照のみ。 class Repository { //シーンの切り替わりで動的に生成・破棄し、インスタンスを必要分だけ保持する。 Task* tasks[1024]; //1次元配列。インスタンスを注入。 Filament* filaments[256]; //1次元配列。インスタンスを注入。 Fiber* fibers[64]; //1次元配列。インスタンスを注入。 }; http://echo.5ch.net/test/read.cgi/gamedev/1337516528/996
997: 名前は開発中のものです。 [sage] 2012/10/23(火) 01:16:10.47 ID:lf4QviES ↑極端な例だが、 Repositoryクラス内で、シーン中、必要なインスタンスしか確保しないという条件の場合、 まずSynthesisクラス内の要らないfibers_active要素だけ削除フラッグを立てて、 次にRepositoryクラス内のフラッグが立ったfibers要素をdeleteして、 次にRepositoryクラス内のフラッグが立ったfilaments要素をdeleteして、 最後にRepositoryクラス内のフラッグが立ったtasks要素をdeleteする、 っていうのが効率的なんじゃないか? 要は、麗しのタスクシステムなんだが(笑) http://echo.5ch.net/test/read.cgi/gamedev/1337516528/997
998: 名前は開発中のものです。 [sage] 2012/10/23(火) 02:02:33.12 ID:7yJptL6x >>992 「確実に管理しなければならない」ポイントを減らすためにライブラリ使うんでしょ http://echo.5ch.net/test/read.cgi/gamedev/1337516528/998
999: 名前は開発中のものです。 [sage] 2012/10/23(火) 10:35:59.82 ID:8kXxMAJY お疲れ http://echo.5ch.net/test/read.cgi/gamedev/1337516528/999
1000: 名前は開発中のものです。 [age] 2012/10/23(火) 10:41:49.45 ID:5T7QFGuf そしてさようなら(#゚Д゚)/~~ http://echo.5ch.net/test/read.cgi/gamedev/1337516528/1000
1001: 1001 [] Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。 http://echo.5ch.net/test/read.cgi/gamedev/1337516528/1001
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.015s