ユーザーが一意のポインターの所有権を明示的に取得できないようにする方法はありますか
std::move
?
成功するconst
unique_ptr
move コンストラクターは非 const 右辺値参照を取るため、const
オブジェクトで呼び出すことはできません。
const unique_ptr<int> owner(new int);
// ...
unique_ptr<int> thief = std::move(owner); // ERROR
これによりunique_ptr
、boost::scoped_ptr
を返すことstd::unique_ptr
で、オブジェクトの制御を放棄したことになります。新しい所有者はそれを破棄するか、他の誰かに渡します。
ユーザーがオブジェクトを解放することを意図していない場合は、参照を返します。
boost::scoped_ptr
/ (ジョナサンの回答を参照) が技術的にあなたconst std::unique_ptr
の質問に答えます - 発信者は解放しますが、リソースを譲渡することはできません - しかし、なぜそれや参照ではなくこれが必要なのかの説得力のある例が見当たりませんstd::unique_ptr