배경 : 많은 변수가있는 복잡한 클래스가 있습니다.operator =?에서 placement new (this)를 사용할 수 있습니까?
초기화 도구 목록에서 호출 된 멤버 변수 복사본 생성자 중 일부가 할당을 수행합니다.
질문 : operator=
을 만들어야합니다. 오히려 나는 단순히 다음을 수행 할 수 있습니다, 등 등 등 대체되고있어 할당 대신 초기화 목록 및 해제 메모리와 기존의 constructor에 복제 및보다 : 즉
Applepie& Applepie::operator=(const Applepie ©)
{
if(this != ©)
{
this->~Applepie(); // release own object
new(this) Applepie(copy); // placement new copy constructor
}
return *this;
}
, 배치 다음에 자기를 파괴하는 것입니다 연산자와 의미 적으로 동일한 새로운 복사 생성자 =?
이것은 반복 코드를 크게 줄이고 각 변수를 올바르게 초기화했음을 확인하는 것으로 할당 중에 약간의 효율성 손실이 발생할 수 있음을 나타냅니다. 나는 더 무언가를 놓치고 있니?
이론적 설명 : 실제 수업에는 약 30 개의 약점이 있습니다. 나는 복사 생성자와 대입 연산자가 모두 30 개를 복사해야한다는 것과 코드가 갈라져 두 작업이 다르게 작업하게된다는 사실에 우려하고있다.
복사본 ctor가 throw되면 개체가 끊어져서 안전을 보장 할 수 없습니다. –
@R Martinho - 그것은 내가 수동으로 각 변수를 할당했다면 복사 연산자가 던져 버릴 수있는 모든 상황이 던져 버릴 것이라고 생각합니다. 그래서 ... 여전히 동일하게 보입니까? – jcwenger
문제는'operator ='throwing이 아니며'operator ='객체가 유효하지 않은 상태로 남습니다! 파괴되었습니다. –