January 02, 2004実体 vs ポインタ[Computer]
仕事の関係でC++を書いています。疑問に引っかかりました。 class Hoge{
private: vector<string> spool; public: vector<string> *getSearchResult(const Condition &cnd) const{ vector<string> *result = new vector<string>; for(vector<string>::const_iterator target = spool.begin(); target != spool.end(); target++){ if(cnd.match(*target)) result->push_back(*target); } return result; } }; class Hoge2{ 要約するとこういうことです。メンバメソッドgetSearchResultを比較してください。上のHogeクラスのほうでは、検索結果としてvectorのポインタを返しているのに対して、下のHoge2クラスのではvectorの実体を返しています。 利点と欠点を整理すると、Hogeのほうではポインタを返すためにオーバーヘッドが発生せず高速処理が可能なかわりに、caller(メソッドを呼び出す側)で責任を持ってメモリを開放(delete)してやる必要があります(忘れると致命的なバクになりかねない)。一方Hoge2のほうでは実体を返すために、メモリの開放が不要(スコープから抜ければ自動的にメモリが開放される)でメモリリークの心配がないが、コピーを作成するためにスピードを犠牲にしています。 どっちがいいんでしょうか。多分、これは思想の問題で、状況によって答えがかわってくると思いますが。 コメント
コメントする
|
スポンサード リンク
|