클래스에 있는 다음 4개의 method를 의미한다.
class A final
{
public:
A ();
A (const A &a);
~A ();
A & operator = (const A &a);
};
나머지는 다 OK.
copy assignment operator는 주목할 필요가 있다.
A&
인가?일단 문법적으로 a = b = c
와 같은 표현이 정상적으로 동작하는 것을 권장하므로, void
형이나 다른 자료형이 아닌 A
클래스로 리턴을 해야 한다.
그러면 A
로 리턴하면 되지, 왜 굳이 A&
로 함?
위의 경우를 다시 보면, 만약 A
로 리턴하는 경우, a = b = c
를 사용하게 된다면,
당장 이 경우만 보더라도 2, 4의 과정이 추가되었다.
더 많은 할당 chain이 이루어질 경우, 성능 저하가 발생한다.
A a = b;
와 같이 쓰였을 경우?A a = b;
의 경우 실제 정의가 이루어지는 부분이기 때문에 = 연산자가 쓰였을지라도 실제로는 복사 생성자가 호출된다.)//1. b는 A 클래스의 객체
A a = b;
//2. A 클래스의 생성자에 std::string이 인자로 들어오는 경우
A a = "eng";
//3. rvalue? 값이 들어온 경우 - 1
A a = A();
//4. rvalue? 값이 들어온 경우 - 2
A a(A());
.
.
.
지금은 너무 귀찮다. 2번에 대해서는 나중에 추가할 예정.