*p
は、auto_ptr::operator*
を呼び出します。これはマネージドポインタを逆参照します。
*p.get
最初にメソッドauto_ptr::get
を呼び出します。このメソッドはマネージドポインタを返し、次にオペレータ*
によって参照解除されます。
これは、一度実行すると同じ結果が得られます。つまり、管理ポインタが参照解除され、get
を使用したときに追加のチェックは行われません。
auto_ptr
は、C++ 11以降では非推奨です。
std::auto_ptr<int> p(new int(42));
{
std::auto_ptr<int> copy_of_p(p); // ownership of *p is transfered here
// ...
p = copy_of_p; // p gets back ownership
} // copy_of_p is destroyed, but doesn't delete pointer owned by p
// p is still valid
使用unique_ptr
またはその代わりshared_ptr
:
std::auto_ptr<int> p(new int(42));
{
std::auto_ptr<int> copy_of_p(p); // ownership of *p is transfered here
} // copy_of_p is destroyed, and deletes its owned pointer
// p is now a dangling pointer
問題を回避するには、「管理対象のポインタを管理」する必要がありました:ポインタの所有権がコピー時に転送されているので危険です。
実際には違いはありません。 – Nawaz
これはタグ付けされているため、C++ 11では 'std :: auto_ptr'は廃止され、C++で削除されます17。代わりに 'std :: unique_ptr'を使用してください。 –
"get()はより安全ですか?" 'auto_ptr'を使うと、私の意見ではあなたのコード全体が安全でないものになります。それを使用しないでください。 –