Post

[ STUDY/Effective C++ ] 2022. 6. 23. 21:51

컴파일러는 우리를 대신해서 기본생성자, 복사생성장, 복사 대입 연산자, 소멸자 등 기본형 함수를 만들어낸다.

 

하지만 의 경우에는

std::string newDog("Persephone");
std::string oldDog("Satch");

NameObject<int> p(newDog, 2);
NameObject<int> s(oldDog, 36);

p=s;

 

참조자 p는 원래 자신이 참조하고 있는것과 다른 객체를 참조할 수 없다. 그렇다고 값 자체가 바뀌는것은 대입연산에 직접관여하지 않는 객체(string에 대한 포인터나 참조자를 품는 다른 객체들)까지 영향을 받게된다.

 

그렇게 된다면 컴파일 거부가 뜰 수 있다.

이럴 경우를 대비해서 복사 대입 연산자의 경우에는 직접 정의를 해야한다.

▲ top