■ このスレッドは過去ログ倉庫に格納されています
C++でゲームプログラミングしているんだけど質問がある!
- 1 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 06:09:42 ID:ie+yrqr+0.net
- newってどういう場面で使うの?
- 2 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 06:10:20 ID:tMvrXOI0a.net
- 新しいインスタンスをヒープに作りたいとき
- 3 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 06:10:52 ID:39xDHkDH0.net
- わかる
ユニークポインタで良くね
- 4 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 06:11:39 ID:Iiozp4aX0.net
- インスタンスを生成するとき
- 5 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 06:14:04 ID:ie+yrqr+0.net
- class neko{}
ってのがあったとして
neko nekoneko;
じゃだめなの?
- 6 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 06:14:54 ID:tMvrXOI0a.net
- それじゃインスタンスがスタックに作られるから現在のネストを抜けたら消えるだろ
- 7 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 06:16:45 ID:ie+yrqr+0.net
- >>6
現在のネストを抜けても残したい場合に使うって事?
例えば、一度クラスから抜けて
他のクラスを宣言した時にまた使いたい時などに使うって事?
- 8 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 06:17:48 ID:tMvrXOI0a.net
- >>7
そう
- 9 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 06:18:30 ID:ie+yrqr+0.net
- >>8
具体的にどういう時に使うの?
- 10 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 06:19:52 ID:hM7y/b8S0.net
- スタティックおじさんかな?
- 11 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 06:23:09 ID:ie+yrqr+0.net
- >>10
うん。基本全部スタティックで作ってる
必要な分全部初めに宣言して
クラス間は上のクラスから引数で直接渡してる
- 12 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 06:25:18 ID:tMvrXOI0a.net
- >>9
だからネストをまたいでインスタンスを残したい時
グローバル変数とローカル変数みたいなもんだよ
- 13 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 06:25:52 ID:ie+yrqr+0.net
- class data{}
class neko{}
data datadata;
neko nekoneko(detadata);
みたいな感じにしてると思うたぶん
- 14 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 06:26:24 ID:ie+yrqr+0.net
- >>12
具体的にどういう処理の時に使うの?
実装例みたいな
- 15 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 06:27:23 ID:ie+yrqr+0.net
- 実装例っていうか具体的にどういう時に使うのか知りたい
- 16 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 06:28:56 ID:L5UNIv7p0.net
- メモリが無限にあるならnewしなくていいよ
- 17 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 06:29:03 ID:ie+yrqr+0.net
- グローバル変数も全部一番上でクラスにして
引数で渡してしまえば使う必要はないじゃん?
でも具体的にどういう場面で使うのかなと
const化して定数にするとか?
- 18 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 06:29:58 ID:ie+yrqr+0.net
- >>16
最初に全部宣言して、それを使えばいいんじゃないの?駄目なの?
- 19 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 06:31:10 ID:Iiozp4aX0.net
- 別に使わなくていいよ
- 20 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 06:31:42 ID:ie+yrqr+0.net
- >>19
全部スタティックでもいいの?
- 21 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 06:32:11.637 ID:ie+yrqr+0.net
- こういう時には使った方が良いよとかあれば知りたい
- 22 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 06:33:49.408 ID:Iiozp4aX0.net
- メソッドだかメンバ関数だかよく知らんけど全部staticでいいなら使う必要はないよ
- 23 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 06:33:50.530 ID:39xDHkDH0.net
- 派生クラス使うときnew使うだろ
- 24 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 06:33:52.201 ID:ie+yrqr+0.net
- というか日ごろから積極的に使ったりしているの?
- 25 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 06:34:34 ID:ie+yrqr+0.net
- >>23
派生クラスを作った事がないんだけど・・・やばい?
- 26 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 06:34:47 ID:qGbyiGAS0.net
- つかわない
- 27 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 06:35:33 ID:ie+yrqr+0.net
- 派生クラスを勉強するとnewを使い始めると言う事?
- 28 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 06:35:59 ID:ie+yrqr+0.net
- >>26
使わなくても問題ない?
- 29 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 06:40:39 ID:01OkFk1S0.net
- ゲームエンジン作ってるわけでもなく
まだnewの使い時が分からないレベルなら
大人しくUnity×C#にしといた方がいいぞ
まあ正直new使うことほぼ無いと思うが
- 30 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 06:42:02 ID:39xDHkDH0.net
- 俺は基底コンストラクタ作りたくないときにポインタ使う
class A
{
public:
A(int i){};
}
class B
{
public:
A* AA;
B(){AA=new A();};
}
- 31 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 06:42:42 ID:39xDHkDH0.net
- ミス
AA=new A(1);
- 32 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 06:43:04 ID:ie+yrqr+0.net
- 正直最近なんで1から作っているんだろうと疑問は感じている・・・
- 33 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 06:44:55 ID:v8s8pUf2a.net
- 趣味?
- 34 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 06:45:23 ID:ie+yrqr+0.net
- >>31
それって
class Bの中でAのデータを変更したいと言う事でしょ?
単純に引数でポインタでAを送ればいいだけじゃないの?
BB.func(&AA);って感じで
- 35 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 06:45:51.276 ID:ie+yrqr+0.net
- >>33
プロはどういう風に使うの?
- 36 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 06:49:10.550 ID:ie+yrqr+0.net
- なんかわからなくてモゾモゾする!
- 37 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 06:49:11.595 ID:39xDHkDH0.net
- 「変更したいとき」じゃない
Bクラスの中でインスタンス固有のAクラスのインスタンスを扱いたいとき
- 38 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 06:52:16 ID:ie+yrqr+0.net
- >>37
その場合は普通にダイレクトに
BB.func(AA)と送ればいいんじゃないの?
というか面倒くさいから全部ポインタで送ってるw
- 39 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 06:54:21 ID:01OkFk1S0.net
- C++でポインタ使う場面とかほぼ無くね?
- 40 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 06:54:32 ID:L5UNIv7p0.net
- newしないということはつまりメモリの開放を一切行わないというわけで
つまりメモリ効率が常に最悪なわけで
メモリ潤沢なPCならともかく、スマホやコンシューマでそんなプログラムが動くわけがない
- 41 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 06:55:44 ID:ie+yrqr+0.net
- >>39
参照渡ししているの?
- 42 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 06:56:39 ID:+8Vj5BOz0.net
- >>20
いいわけねーだろ
- 43 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 06:56:40 ID:ie+yrqr+0.net
- >>40
でもUnityとかって全部スタティック宣言じゃないの?
最初にすべてのオブジェクトのデータを入れるじゃん
- 44 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 06:57:02 ID:LjqYv2Su0.net
- C++でnewを使わないってそれどこがC++なんだ?
- 45 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 06:57:35 ID:ie+yrqr+0.net
- クラスを派生させた事がない!
- 46 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 06:57:48 ID:39xDHkDH0.net
- C♯とかjavaはメモリ管理勝手にやってくれるらしいよね
- 47 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 06:58:18 ID:ie+yrqr+0.net
- >>44
どういう時に使うか教えてほしい
- 48 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 06:58:44 ID:ie+yrqr+0.net
- >>46
C#もJavaも全部スタティックでしょ?
- 49 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 06:59:47 ID:01OkFk1S0.net
- >>41
基本的には参照で済むよね
- 50 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 07:00:52 ID:ie+yrqr+0.net
- >>49
正直どちらでもいいような気はしている
- 51 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 07:01:04 ID:39xDHkDH0.net
- >>38
違うBクラスに使われるかも知れない
BBB.func(AA)みたいに
共有したいならいいかもしれないけど明らかに自分しか使わないものは
- 52 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 07:01:24 ID:SfDMjF840.net
- 継承はつかわなくてもいいけど
プログラムを個々のパーツに分けて考えたらnewの意味がわかる
無関係の処理とデータが横並びでずらっとあると使い方分からんだろ
- 53 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 07:01:41 ID:01OkFk1S0.net
- スタティックってどういう意味で使ってるんだ?
C/C++のstaticは意味が多すぎて単にスタティックと言われても何を指してるのかわからない
- 54 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 07:02:13 ID:ie+yrqr+0.net
- そもそも直接クラスに送らないで
上のクラスで判定してる
- 55 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 07:02:33 ID:01OkFk1S0.net
- >>50
どうしてもポインタを使わなければならない理由がないなら参照を使うべき
- 56 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 07:02:57 ID:SfDMjF840.net
- >>53
状態を持たないってことじゃないの?
- 57 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 07:05:34 ID:ie+yrqr+0.net
- >>53
動的と静的(スタティック)で
mallocとnewはメモリの動的確保だと思っているんだけど
具体的にどういう時に使うのかな?と
例えば、モンスターとかを全部newで作る物なのかな?と
そうなると処理の部分が大幅に変わる気がして
できるもんなのかなぁ?と凄いモゾモゾする
- 58 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 07:07:50 ID:ie+yrqr+0.net
- >>55
C++の本にポインタのほうが処理が速いと書いてあったんだよね
参照の場合結局値をコピーして新しいのを作ってるみたいなイメージ
ポインタの場合はアドレスだけ送っているから変数1個しか使ってない
- 59 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 07:09:34 ID:39xDHkDH0.net
- >>57
今のコード見せてよ
- 60 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 07:10:20 ID:ie+yrqr+0.net
- >>59
なんで?
- 61 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 07:12:01 ID:39xDHkDH0.net
- 試しに変更してみるから
- 62 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 07:12:44 ID:ie+yrqr+0.net
- >>61
何を?
- 63 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 07:12:46 ID:g3xnqz370.net
- けちんぼ!
- 64 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 07:13:27 ID:42M5viyo0.net
- おちんぽ!
- 65 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 07:13:37 ID:01OkFk1S0.net
- >>58
ほんとぉ?
参照もポインタも同速じゃね?
ベンチマーク取ってみたか?
- 66 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 07:15:42 ID:ie+yrqr+0.net
- >>65
しらん!本に書いてあっただけだから
- 67 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 07:18:27 ID:L5UNIv7p0.net
- >>30にしたって別に
class B
{
public:
A a;
B() : a(1) {};
};
でいいやん
- 68 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 07:19:50 ID:ie+yrqr+0.net
- >>67
それは無駄に増えるじゃんww
- 69 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 07:20:27 ID:ie+yrqr+0.net
- class B
{
public:
A a;
B() : a(1) {};
};
B BB[10];とかにしたら無駄に9個増えるw
- 70 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 07:22:27 ID:39xDHkDH0.net
- >>67
基底のコンストラクタがありません。
- 71 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 07:23:02 ID:39xDHkDH0.net
- >>57
「モンスターとかを全部newで作る物なのかな?」とか書いてるけど
逆にお前のコードは
enemy Enemy[5]
とかって宣言してるの?
- 72 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 07:27:14 ID:ie+yrqr+0.net
- >>71
うん
- 73 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 07:27:14 ID:L5UNIv7p0.net
- >>69
いやどっちの方法でもAは10個生成されるが
>>70
A(int)コンストラクタで初期化できてるが
- 74 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 07:29:18.640 ID:39xDHkDH0.net
- >>73
え、まじ?
すまん。
- 75 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 07:29:36 ID:ie+yrqr+0.net
- >>73
A AA;
B BB[10];
BB.func(AA);ならAは1個じゃん
上のやり方だとAAが10個出来てる
- 76 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 07:31:36 ID:39xDHkDH0.net
- 宣言できないと思ってた
- 77 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 07:34:20.791 ID:L5UNIv7p0.net
- あるいは
class B
{
public:
A a = A(1);
B() {};
};
- 78 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 07:58:17 ID:SfDMjF840.net
- うーんこのガイジ感
- 79 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 07:59:21 ID:ywrWHa5+0.net
- >>2
これ
- 80 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 08:02:41 ID:/9j9p6S/0.net
- pushbackだっけ?追加するの
それ使うときは使う
- 81 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 08:06:16 ID:ie+yrqr+0.net
- >>80
なにそれ?
- 82 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 08:07:17 ID:01OkFk1S0.net
- >>81
std::vector使わんのか?
Cじゃないんだから生配列はやめようぜ
可変長が嫌ならstd::arrayでもいい
- 83 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 08:13:58 ID:ie+yrqr+0.net
- >>82
使ってない!
ベクターはどういう時に使うの?
- 84 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 08:15:07 ID:ie+yrqr+0.net
- 嫌と言うか可変長の判定処理方法がわからない・・・
なんでもかんでもクラスにすると判定が出来なくなる・・・
- 85 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 08:15:34 ID:01OkFk1S0.net
- push_backの引数で直接newしたら確実にメモリリークしそうだが
- 86 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 08:17:13 ID:LjqYv2Su0.net
- >>47
C++にはエレガントな書き方とダサい書き方があるんだけど、ダサい書き方で説明すると
こういうデータとこういう機能をワンセットにしたというのがクラス
このクラスを実体化させるときにnewを使って、newを使ってできたものをインスタンスという
クラスの時点ではそれは設計図のようなもので、実体化した製品ではない。
マウスで例えると、マウスの設計図がクラスでお前が手に持ってるマウスはクラスが実体化したインスタンスになる
エレガントな書き方はオブジェクト指向をしゃぶりつくしたような奴でないと理解できないのでお前にはまだ早い
どうしても知りたかったらデザインパターンでググれ
- 87 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 08:17:13 ID:ie+yrqr+0.net
- モンスターとかも必要数だけで
すべてゼロクリアして置いておくものなんじゃないのかな?と考えているんだよね
そうしないと判定が難し過ぎる・・・
というか処理がごろっと変わるというかやり方が分からない
- 88 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 08:20:03 ID:01OkFk1S0.net
- >>83
C++の可変長配列は基本的にvectorでいい
固定長で済む場合だけarray
std::listとかもあるけどstd::vectorに勝る点が事実上何もないから必要ない
- 89 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 08:20:07 ID:ie+yrqr+0.net
- >>86
なんていうか僕の書き方はもっともダサい書きかたな気がする
イメージとしては構造体+メソッドを一緒に書けるだけ
むしろ構造体を別ファイルに書けるとしか思ってない
必要なデータはすべて最初に宣言してゼロクリアして
必要な数だけ判定して用意する
というかそうしないと判定のやり方が分からない
- 90 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 08:22:44 ID:ie+yrqr+0.net
- >>88
配列って
aaa[10];の事でしょ?
aaa[???]を生み出せるのがベクターということ?
aaa[10];の場合はアレイっての使うの?
ぶっちゃけaaa[???]が出来ないから困ってはいる
ベクターを使う時にnewを使うの?
- 91 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 08:23:18 ID:01OkFk1S0.net
- 残念だがC++は基本的にオブジェクト指向言語じゃないんだわ
オブジェクト指向を学ぶにはちゃんとしたオブジェクト指向言語で学んだ方がいい
C++をやるのはその後でも遅くない
- 92 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 08:25:26 ID:ie+yrqr+0.net
- >>91
Unityとかやったけど
オブジェクト指向って基本的にすべて静的に確保しているよね?
そして全部ゼロクリアしてる
可変長なんて使わないよね?
- 93 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 08:29:11 ID:01OkFk1S0.net
- 全体的に何いってんだこいつ状態なんだが
> オブジェクト指向って基本的にすべて静的に確保しているよね?
は明らかに嘘
- 94 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 08:31:03 ID:ie+yrqr+0.net
- Javaとかはすべて静的に確保するじゃん
Unityもやればわかるけど
すべて最初に静的確保後にゼロクリアしてる
- 95 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 08:31:52 ID:ie+yrqr+0.net
- C言語だけ特殊で動的確保とかいうわけわかめが出来る
マーロックとニューだと思うけど・・・意味が分からない
高度過ぎて謎すぎる
- 96 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 08:34:19 ID:01OkFk1S0.net
- Javaが全て静的に確保でCだけが動的確保可能?まじで何いってんだこいつ
Javaは全部シングルトンでインスタンスなんて概念は存在しないってか?
勉強し直せとしか言えないな
- 97 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 08:41:01 ID:ie+yrqr+0.net
- 知らないのに煽られているとしか思えないw
- 98 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 08:42:45 ID:ie+yrqr+0.net
- もうやめよう
知らないのに知ったかで煽って来られても困る・・・
- 99 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 08:42:57 ID:w1rrdmIg0.net
- 例えば、モンスターの出現数をランダムにする時にnewかな
- 100 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 08:44:59 ID:Pn3B1luja.net
- 上で言ってる人も居るけど動的にメモリ確保するためよ。
ちっこいゲーム程度だとあんまり意識しなくていいかも知れないけど、高解像度の画像処理を行うプログラムとかだとメモリーのリソース食いつぶすから、使うときにメモリー確保して使うって形にしたほうがいい。
- 101 :以下、?ちゃんねるからVIPがお送りします:2020/05/01(金) 08:46:03 ID:SfDMjF840.net
- 何言ってんだこいつ…頭悪すぎる
総レス数 101
19 KB
掲示板に戻る
全部
前100
次100
最新50
read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★