私はunique_ptrを理解しようとしていますが、私にはちょっと困惑しています。一部 - - 削除されたために、私は、元のポインタが期待されるコードの2行目の後なぜunique_ptrへの未処理のポインタをキャストしてもオリジナルは削除されませんか?
PartClass * part= new PartClass;
//The OwnerClass is a composite that excpects a unique_ptr
OwnerClass * owner = new OwnerClass(unique_ptr<PartClass>(part);
: 次のコードを考えてみましょう。結局のところ、あなたはunique_ptrを持つとすぐに、それは大騒ぎを引き起こし、移動する必要があります。それで、コンパイラは未加工のポインタがまだパーツオブジェクトにアクセスできるようにします。それはunique_ptrの全体のコンセプトに違反していませんか?
'OwnerClass'がどこかに格納していると仮定すると、オーナーシップは' OwnerClass'に移動されるので、 'part'は削除されません。それはあなたが混乱していることですか? – TartanLlama
"なぜコンパイラは未処理のポインタがパーツオブジェクトにアクセスすることを許可していますか?それはunique_ptrの全概念に違反していませんか?それは自由な世界です(もっとコンパイラに似ています)、あなたは '42を削除できます;もしあなたが好きなら、コンパイラはあなたの意図を尋ねません。もしあなたがゼロで分割したいのであれば、彼はあなたを止めません。生ポインタまたは正しい 'unique_ptr'を使用したい場合は、' law'はここにはありません。時にはハックをしてrawを使うこともできます。 – Vladp
'unique_ptr ''部分を削除する 'とはどういう意味ですか?そして、もしあなたが 'part'について話しているのであれば、それは参照されたコンテンツではなく、このスコープのスタックに割り当てられ、スコープを離れるときに削除されます。 – Vladp