c++ 복사생성자, 깊은 복사, 얕은 복사

강효림·2023년 5월 21일
0

c++

목록 보기
8/8

복사생성자

복사생성자는 한 객체의 내용을 다른 이름으로 복사하여 생성한 생성자이다. 생성된 생성자는 같으나 그 내용이 다른 객체를 복사하여 생성된 것이다.
자신과 같은 타입의 객체를 인자로 받으며 복사생성자가 정의되지 않으면 디폴트 복사생성자가 만들어진다.

MString(const MString& m)
		: c_str_(m.c_str_), size_(m.size_) 
	{
	}
    
//메인에서 호출할 때
MString str2 = str;

얕은 복사

별도의 공간을 마련하지 않고 포인터의 주소값만 복사하는 것이다.

int* ptr2 = ptr1;

원본데이터를 손실할 수 있으며 그 객체에 접근하는 포인터가 2개(ptr1, ptr2)인 셈이다.
만약 얕은 복사된 객체에 접근하는 포인터중 1개가 바뀌면 다른 하나도 의도치 않게 바뀐것으로 알게된다.

복사생성자로 얕은 복사

Munja(const Munja& hj): str_(hj.str_)
	{
   	}

주소값만 가져온다.

깊은 복사

얕은 복사와 달리 별도의 공간을 만들어 포인터가 가리키는 내용을 복사한다.

int* prt2 = new int[3];
for(int i = 0; i<3; i++){
	ptr2[i] = ptr[i];
}

깊은 복사를 하면 원본 데이터가 유지된다.

복사생성자로 깊은복사

Munja(const Munja& hj)
	{
		str_ = new char[strlen(hj.str_) + 1];
		strcpy(str_, hj.str_);
    }

값을 모두 가져온다.

0개의 댓글