본문 바로가기

Programming/C++

12. 복사 생성자

1. 깊은 복사

class Test
{
public:
       char* mPc ;
       Test()
      {
             mPc = new char[ 10];
             printf(" 일반생성자 \n");
      }
       Test(const Test& test)
      {
             mPc = new char[ strlen(test .mPc)+ 1];
             strcpy(mPc ,test. mPc);
             printf(" 복사생성자 \n");
      }

};
int main ()
{
       Test test1 ;
       Test *test2 = new Test(test1 );
       // 출력복사생성자
       Test test3 (test1);
       // 출력복사생성자
       Test test4 = test1;
       // 출력복사생성자
       return 0 ;
}

김은 복사를 하여야 하는 이유...
복사함수를 오버라이딩 하지 않고 얕은 복사를 할경우 클래스의
동적할당된 맴버변수 의 메모리를 공유 하게 된다.

그래서 직접 복사함수를 오버라이딩 하여 동적 할당된 변수를 직접 관리 하여야 한다