*p
은 auto_ptr::operator*
으로, 관리되는 포인터를 역 참조합니다.
첫 번째 호출 메서드 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++에서 제거 될 것입니다. 대신'std :: unique_ptr'을 사용하십시오. –
"get()이 더 안전합니까?" 'auto_ptr'을 사용하면 내 코드가 전체 코드를 불안하게 만듭니다. 사용하지 마십시오. –