こんにちは、私を困惑させる質問をしたいと思います。
私はこのようなクラスを持っています:
class A {
private:
std::vector<Object*>* my_array_;
...
public
std::vector<Object*>& my_array(); // getter
void my_array(const std::vector<Object*>& other_array); // setter
};
私はあなたの経験に基づいて、(可能な)安全な方法でセッターとゲッターを実装する正しい方法は何であるかをあなたに尋ねたいと思いました。
私の頭に浮かんだ最初の解決策は次のとおりです。
まず、セッターを実装するときは、次のことを行う必要があります。A)入力が既に保持しているデータ構造を参照していないことを確認します。B)my_array_が指すすべてのオブジェクトのメモリを解放します。C)other_arrayが指す各オブジェクトをコピーし、そのコピーをmy_array_に追加します。D)最後に関数を終了します。
念のため、ゲッターは内部配列のコピーを作成する場合があります。
質問はたくさんあります:-この戦略はやり過ぎですか?-それは本当に問題を回避しますか?-誰かが実際にそれを使用していますか、それともより良いアプローチがありますか?
私はこの質問に対する答えを探しようとしましたが、この問題に特に焦点を当てたものは何も見つかりませんでした。
スマートポインタを使用することは非常に良い答えです、私は両方に感謝します..私は複数に「有用な答え」を与えることができないようですので、事前にお詫び申し上げます。:-)
しかし、あなたの答えから、新たな疑問が生じました。オブジェクトに対してunique_ptrを含むベクトルを使用する場合、ディープコピーコンストラクターを定義する必要があります。現在スマートポインターを使用していることを考えると、イテレーターを使用してオブジェクトのベクトル内の各要素をコピーするよりも良い方法はありますか?