0

私の問題はこれです。初期化した直後にベクターにプッシュするオブジェクトがあります。ベクトルは、現在のメソッドが範囲外になった後もずっと使用されます。

コードは次のようになります。

DataObject *ptrDataObj = new DataObject();
Parent::DataVector.push_back(ptrDataObj);
:
:
// end of method

この実装は確実にメモリ リークを引き起こします。ただし、ポインターの代わりに RAII を使用すると、DataVector が使用するまでに DataObject は範囲外になります。私が見る唯一の代替手段は、ある種のコピーを含む可能性があります。

私は何年もの間 C# に没頭しており、ネイティブの世界に再び慣れようとしています。

お知らせ下さい..

4

2 に答える 2

4

ベクターが値ではなくポインターでオブジェクトを格納するのはなぜですか?

ベクトルを次のいずれかにします。

  • std::vector<DataObject>
  • std::vector<std::shared_ptr<DataObject> >.

また、C++11 を使用している場合はemplace_back、コピーを回避するために使用できます。

std::vector<DataObject> vec;
vec.emplace_back(constructor_arg1, constructor_arg2);
于 2012-08-25T21:49:04.653 に答える
2

ただし、ポインターの代わりに RAII を使用すると、DataVector が使用するまでに DataObject は範囲外になります。

適切に使用すればそうではありません。参照カウント スマート ポインターを使用する場合、オブジェクトは少なくともベクターと同じくらい存続し、適切に破棄されます。

于 2012-08-25T21:49:30.930 に答える