std::unique_ptr<int> p1(new int);
std::unique_ptr<int> p2(new int);
p2=p1;
ここでは、p2も参照しているため、p1は「一意」ではなくなっているようです。
それは合法的なC++ですか?unique_ptrにはcopy_semanticsがありますか?いいえの場合、および移動セマンティクスしかない場合、p2に割り当てた後にp1はNULLに設定されますか?
編集:
わかりました。正しいバージョンは
p2=std::move(p1)
それによると、この割り当ての後、p1は無効ですか?そして、auto_ptrとの違いはここにありますか?auto_ptrの場合のように、暗黙的に所有権の譲渡を明示的に指定するよりも安全です。