auto_ptr 클래스의 작동 방식에 대한 특정 정보를 이해하려고합니다. 다음 클래스를 가지고 있다고 가정 해 봅시다 (할당 연산자의 세밀한 포인트를 설명하는 웹 사이트에서이 클래스를 발견했습니다).auto_ptr을 이해하려고 시도 중
class TFoo : public TSuperFoo {
auto_ptr<TBar> fBar1;
auto_ptr<TBar> fBar2;
public:
TFoo& TFoo::operator=(const TFoo& that);
// various other method definitions go here...
}
이제 할당 연산자를 구현합니다.
TFoo& TFoo::operator=(const TFoo& that)
{
if (this != &that) {
auto_ptr<TBar> bar1 = new TBar(*that.fBar1);
auto_ptr<TBar> bar2 = new TBar(*that.fBar2);
fBar1 = bar1;
fBar2 = bar2;
}
return *this;
}
그는 두 번째 새로운 작업이 실패하면 우리가 기능을 종료 할 때, 첫 번째 새 TBar는 auto_ptr은의 소멸자에 의해 삭제됩니다, 여기
말을 계속한다. 그러나 new가 모두 성공하면 할당은 이전에 가리킨 fBar1과 fBar2 객체를 삭제하고 bar1과 bar2를 제로화하여 소멸자가 함수를 종료 할 때 아무 것도 삭제하지 않도록합니다.
제 질문은 왜 bar1과 bar2가 제로화 될 것입니까? 그게 무슨 소리 죠? 당신이 뭔가를 할 필요가 없어요.
fBar = bar1.release();
감사합니다.
'auto_ptr'에 대해 이해해야 할 유일한 것은 깨 졌으므로 사용해서는 안된다는 것입니다. –
@Captain 일부 상황에서는 완벽하게 문제가 해결되지 않습니다. C++ 11을 사용하는 경우에는 사용할 이유가 없습니다. 그러나 C++ 03에는 때로는 좋은 대안이 없습니다. 어쨌든, 질문은 좋은 것이고'unique_ptr'에도 적용됩니다. – juanchopanza
[Copy-Swap Idiom] (http://stackoverflow.com/q/3279543/10077)에 대해 배우고 싶을 수도 있습니다. –