2ちゃんねる スマホ用 ■掲示板に戻る■ 全部 1- 最新50    

■ このスレッドは過去ログ倉庫に格納されています

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 ★