簡単に言えば、「スマートポインターを使用する理由は何ですか?」 ex std::unique_ptr
しかし、私はスマートポインター通常の(ダム)ポインターを使用する理由を求めていません。すべての人がそれを知っているか、簡単な検索で理由を見つけることができると思います。
私が求めているのは、これら2つのケースの比較です。
MyObject
という名前のクラス(または構造体)があるとします
std:queue<std::unique_ptr<MyObject>>queue;
のではなく
std:queue<MyObject> queue;
(それは必ずしもキューではなく、任意のコンテナにすることができます)
なぜ2ではなくオプション1を使用する必要があるのですか?
使用例:定数のインデックスを使用してstd::vector
に何かを格納すると同時に、そのベクターからオブジェクトを削除できるようにします。
ポインタを使用する場合は、ポイントされたオブジェクトを削除してvector[i] = nullptr
を設定できます(後で確認することもできます)。これは、オブジェクト自体を格納する場合には実行できません。オブジェクトを格納する場合は、インスタンスをベクター内に保持し、フラグbool valid
または何かを使用する必要があります。これは、ベクターからオブジェクトを削除する場合、そのオブジェクトのインデックスが-1変更された後のすべてのインデックスです。
注:この回答のコメントで述べたように、C++ 17以降にアクセスできる場合は、std::optional
を使用して同じことをアーカイブできます。