私は について学んでおりstd::unique_ptr
、それが何を表しているかを理解しようとしています。
を返す関数 (私の制御外) が与えられた場合、各呼び出しが新しいオブジェクトを指す (以前の呼び出しとは異なる) を返すunique_ptr
ことが暗示/よく理解されていますか?unique_ptr
例として、次のコードは終了時に double-free を生成します。その理由を正しく理解していることを願っていunique_ptr
ます。したがってunique_ptr
、同じメモリ/オブジェクトをカプセル化する 2 つの は、2 番目の破壊時に二重解放を引き起こします。したがって、関数の次の実装は、getUniquePtr()
一般的/暗黙的に不合理であると理解されますか?
// main.cpp
#include <memory>
#include <iostream>
std::unique_ptr<int> getUniquePtr() {
static int* p = new int(42);
return std::unique_ptr<int>(p);
}
class PtrOwner {
public:
std::unique_ptr<int> p_;
};
int main( int argc, char* argv[] ) {
PtrOwner po1;
PtrOwner po2;
po1.p_ = getUniquePtr();
po2.p_ = getUniquePtr();
return 0;
}