こんにちは、C++ のポインタと実体についてどうしてもわからないことがあります。
C++ は Java などとは異なり new をしなくても(Player* player = new Player() とせずとも)インスタンスを生成することができると思います(Player player)が、クラスのメンバ変数として所有することを考えた場合、両者にはどのような違いがあるのでしょうか。
ポインタとして所有することには、インスタンス生成のタイミングを遅らせることができたり、前方宣言によりインクルードを減らすことができたりすることなど様々な利点があることは承知しているのですが、new 演算子によるメモリの動的確保にはメモリリークのリスクもあります。
Github などで C++ により開発されているゲームのソースコードなどを調べてみると、インスタンスを実体として保有していたりポインタとして保有していたりと使い分けられていることがわかりました。
また、例えば
C++
1// Point.h 2class Point 3{ 4public: 5 int _x, _y; 6 7 Point(int x, int y) 8 : _x(x) 9 , _y(y) 10 { 11 } 12}; 13 14// MainClass.h 15#include "Point.h" 16class MainClass 17{ 18 Point point1; // 実体 19 Point* point2; // ポインタ 20 21 MainClass() 22 : point1(1, 1) 23 { 24 point2 = new Point(1, 1); 25 } 26 27 ~MainClass() 28 { 29 delete point2; 30 } 31};
とした場合、動きはどちらも同じになるように思います。
加えて、
C++言語、ポインタを使わないプログラミング
こちらのページではポインタによりインスタンスを生成せずにインスタンスを変数として所有することを勧めています。
一体どういうときにはポインタとして持つべきでどういうときには持たざるべきなのか、その基準の目安といったものもわかりません。
周りに教えてくれる人がおらず、用語がおかしかったり、頓珍漢な質問になってしまっていたりしているかもしれませんが教えてくださると助かります。
よろしくお願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/02/03 11:52