디폴트 복사 생성자는 맴버 대 맴버의 복사를 진행한다. 그리고 이러한 방식의 복사를 가리켜 ‘얕은 복사(shallow copy)’라 하는데, 이는 멤버 변수가 힙의 메모리 공간을 참조하는 경우에 문제가 된다.
힙에 있는 “String” 과 같은 맴버변수를 두 객체가 참조하게 된다. 그러므로 한 객체가 소멸될 경우 문자열이 소멸되고 나머지 객체는 소멸된 문자열을 가르키게 된다.
Person(const Person& copy) : age(copy.age)
{
name=new char[strlen(copy.name)+1;
strcpy(name, copy.name);
}