"Effective C++"에서이 내용을 읽었습니다. Col.10입니다. 할당 연산자가 * this에 대한 참조를 반환하도록하는 것이 좋습니다. 이 아이디어를 테스트하기 위해 코드 스 니펫을 작성했습니다. 대위 연산자를 무시했습니다. 그리고 시험해 봤습니다. 모든 것이 좋습니다. 하지만 해당 연산자를 제거하면 모든 것이 동일합니다. 즉, 체인 할당은 여전히 잘 작동합니다. 그래서 나는 무엇을 놓치고 있습니까? 왜 그런가요? 너희들 한테 몇 가지 설명이 필요해, 고마워. 당신이 완전히 operator=
방법을 제거하면할당 연산자가 C++에서 * this에 대한 참조를 반환합니다.
#include <iostream>
using namespace std;
class Widget{
public:
Widget& operator=(int rhs)
{
return *this;
}
int value;
};
int main()
{
Widget mywidget;
mywidget.value = 1;
Widget mywidget2;
mywidget2.value = 2;
Widget mywidget3 ;
mywidget3.value = 3;
mywidget = mywidget2 = mywidget3;
cout << mywidget.value<<endl;
cout << mywidget2.value<<endl;
cout << mywidget3.value<<endl;
}
오, 알겠습니다. 그렇다면 항상 코드에서이 작업을 수행해야합니까? 아니면 컴파일러에서 처리하도록 하시겠습니까? –
클래스가 필요하다면, 즉 기본 비트 복사가 괜찮 으면'operator ='를 구현해야합니다. 이는 일반적으로 클래스가 소유 한 리소스에 대한 메모리/핸들에 대한 원시 포인터가있을 때 발생합니다. 엄지 손가락의 좋은 법칙은 소멸자가 자원을 확보해야하는 경우, 다른 인스턴스, 이중 해제 및 자원 유출 사이에서 이러한 자원의 원하지 않는 공유를 피하기 위해'operator ='가 필요할 것입니다. –
비트 단위 복사가 아닌 ... '연산자 ='가없는 멤버의 경우 비트 단위 복사를 수행하지만이를 구현하는 멤버의 경우 ('std :: string'을 생각해보십시오.) 기존의 연산자 = '회원이 사용됩니다. –