컴파일러는 우리를 대신해서 기본생성자, 복사생성장, 복사 대입 연산자, 소멸자 등 기본형 함수를 만들어낸다.
하지만 의 경우에는
std::string newDog("Persephone");
std::string oldDog("Satch");
NameObject<int> p(newDog, 2);
NameObject<int> s(oldDog, 36);
p=s;
참조자 p는 원래 자신이 참조하고 있는것과 다른 객체를 참조할 수 없다. 그렇다고 값 자체가 바뀌는것은 대입연산에 직접관여하지 않는 객체(string에 대한 포인터나 참조자를 품는 다른 객체들)까지 영향을 받게된다.
그렇게 된다면 컴파일 거부가 뜰 수 있다.
이럴 경우를 대비해서 복사 대입 연산자의 경우에는 직접 정의를 해야한다.
'STUDY > Effective C++' 카테고리의 다른 글
항목 7: 다형성을 가진 기본 클래스에서는 소멸자를 반드시 가상 소멸자로 선언하자 (0) | 2022.06.25 |
---|---|
항목 6: 컴파일러가 만들어낸 함수가 필요 없으면 확실히 이들의 사용을 금해버리자 (0) | 2022.06.23 |
항목 4: 객체를 사용하기 전에 반드시 그 객체를 초기화하자 (0) | 2022.06.23 |
항목 3: 낌새만 보이면 const를 들이대 보자! (0) | 2022.06.18 |
항목2: #define을 쓰려거든 const, enum, inline을 떠올리자 (0) | 2022.06.18 |