이 질문이 이미 여러 번 요청되었지만이 특정 사례에 대한 답변을 찾을 수 없습니다.
리소스를 소유하지 않고 빈 소멸자와 기본 생성자가있는 간단한 클래스가 있다고 가정 해 봅시다. 클래스 내 초기화 기능을 가진 소수의 멤버 변수가 있습니다. 그들 중 하나가 아닙니다 const
.
deInit
손으로 메서드를 작성하지 않고 다시 초기화하고 그러한 클래스의 객체를 거부하고 싶습니다 . 이렇게하는 것이 안전합니까?
void A::deInit()
{
new (this)A{};
}
문제가 없습니다. 개체는 항상 유효한 상태이며 this
여전히 같은 주소를 가리 킵니다. 그러나 그것은 C ++이므로 확신하고 싶습니다.
*this = A{};
?
*this = A{};
은 this->operator=(A{});
즉, 임시 객체를 만들어에 할당하여 *this
모든 데이터 멤버의 값을 임시 값으로 바꾸는 것을 의미합니다. 그것이 당신이 원하는 것이며 (제 의견으로는) 새로운 게재 위치보다 더 읽기 쉽기 때문에 대신에 함께 갈 것입니다.