1

assign メソッドは、何かを割り当てる前にベクター ターゲット インデックスをクリアすることを読みました。

vector<foo*> somevector;

その場合、assign メソッドは、データをターゲット インデックスにコピーする前に実際に foo* を削除します。

4

3 に答える 3

3

その場合、assign メソッドは、データをターゲット インデックスにコピーする前に実際に foo* を削除します。

いいえ、ポインタ自体は削除されますが、ポインタが指しているオブジェクトは削除されません。

STL コンテナで raw ポインタを使用する場合は注意が必要です。で要素を動的に割り当てるとsomevector、メモリ リークが発生します。

より実践的な方法は、STL コンテナーでスマート ポインターを使用することです。動的に割り当てられたメモリは、以下の場合に割り当て解除されます。

std::vector<std::unique_ptr<foo>> somevector;
于 2013-10-05T01:41:44.020 に答える
2

いいえ std::vector、保存されたポインターで削除を呼び出すことはありません。オブジェクトを破壊するだけです。自明でないデストラクタを持つクラス オブジェクトの場合、破棄はそのデストラクタを呼び出すことで構成されます。ポインター、またはその他の自明に破壊可能なオブジェクトの場合、破壊は何もしないことから成ります。

于 2013-10-05T01:42:00.300 に答える
1

いいえ、オブジェクトへのポインターを含む標準コンテナーは、ポインターで削除を呼び出すことはありません。必要に応じてこれを行う責任があります。これが、ポインタを保存することが悪い考えである理由です。

于 2013-10-05T01:41:37.207 に答える