こんばんは、趣味で C++ でゲームプログラミングをしている者です。
現在 C++ でポインタを扱う際には生のポインタを扱うことは相応しくないと聞き、unique_ptr, shared_ptr, weak_ptr などのスマートポインタについて学習しました。
スマートポインタにより delete を書かなくてよくなりメモリリークの心配が減りました。
しかしながら記述する量が増えてしまい(例えば Sprite* sprite ではなく std::shared_ptr<Sprite> sprite)、コードが読みづらくなってしまいました。
例えば生のポインタを使った場合、
C++
1class SpriteList 2{ 3public: 4 void addSprite(Sprite* sprite); 5 Sprite* getSprite(int index); 6 7private: 8 std::vector<Sprite*> spriteList_; 9};
程度の記述で十分なのに、スマートポインタを使った場合には、
C++
1class SpriteList 2{ 3public: 4 void addSprite(std::shared_ptr<Sprite> sprite); 5 std::shared_ptr<Sprite> getSprite(int index); 6 7private: 8 std::vector<std::shared_ptr<Sprite>> spriteList_; 9};
と、長い記述が必要になってしまいました。
using などを使えば短く書くことはできるとは思うのですが、これは仕方のないことなのでしょうか。
スマートポインタを活用して書かれたコードを見たことがないため、いまいち正しい使い方が分かっておりません。
例えばスマートポインタに対する Getter/Setter の引数や戻り値にもスマートポインタを使うべきなのでしょうか?
上にお示ししたスマートポインタのコードではそのようにしたのですが、例えば、
C++
1class SpriteList 2{ 3public: 4 void addSprite(Sprite* sprite); 5 Sprite* getSprite(int index); 6 7private: 8 std::vector<std::shared_ptr<Sprite>> spriteList_; 9};
のようにしてあげれば冗長な記述が不要となる気もしました。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/03/04 16:35
2017/03/06 16:03