Boost Pointer Containerの最初の例では、生のポインターを構造体に追加します。
class zoo
{
boost::ptr_vector<animal> the_animals;
public:
void add_animal( animal* a )
{
the_animals.push_back( a );
}
};
しかし、push_back
再割り当てをトリガーする可能性のある 、またはその他のメンバー関数がプロセス中に例外をスローした場合はどうなるでしょうか? 私の理解では、その場合、特定のオブジェクトのメモリを管理するのは呼び出し元次第ですが、呼び出し元はメモリを管理することを目的とするクラスに生のポインターを渡すため、呼び出し元がそうしない可能性が最も高いです。 t。
では、上記のコード例である種の固有のスマート ポインターを使用してポインターをコンテナーに提供する前にラップし、メモリー リークが発生しないことを確実にする必要はないでしょうか? コンテナーは、このようなスマート ポインターのオーバーロードを提供しますが、それらの使用を強制しません。
それとも、追加操作中にコンテナーが例外をスローすることはなく、常に成功するという議論ですか?