복사생성자

BS_Lee·2024년 5월 6일
0

C++

목록 보기
12/15

복사생성자란?

  • 생성자를 호출하는 객체와 동일한 타입의 객체를 인자로 전달받아, 전달받은 객체와 동일하게 객체를 구성(=복사)하는 생성자이다.

아래 예제코드를 보면 이해가 더 빠를지도….

복사 생성자 예제 코드

#include <iostream>

class CPoint {
public:
	// 복사 생성자
	CPoint (const CPoint &p) : x(p.x), y(p.y) {}
	// 생성자 오버로딩
	CPoint (int x, int y) : x(x), y(y) {}
	
	void print() {
		std::cout << x << " : " << y << std::endl;
	}
		
private:
	int x;
	int y; 
};

int main(void) {
	
	// p1 객체 생성
	CPoint p1(12, 13);
	p1.print();
	
	// p2 생성자에 p1의 객체를 삽입한 것을 알 수 있다.
	CPoint p2(p1);
	p2.print();
	
	return 0;
}

복사생성자는 깊은 복사일까? 얕은 복사일까?

  • 복사 생성자는 얕은 복사이다.
  • 복사 생성자는 깊은 복사이기 때문에 p1의 값이 변경이 되었다고해서 p2의 값이 변경되지는 않을 것이다.
#include <iostream>

class CPoint {
public:
	// 복사 생성자
	CPoint (const CPoint &p) : x(p.x), y(p.y) {}
	// 생성자 오버로딩
	CPoint (int x, int y) : x(x), y(y) {}
	
	void print() {
		std::cout << x << " : " << y << std::endl;
	}
		
public:
	int x;
	int y; 
};

int main(void) {
	
	// p1 객체 생성
	CPoint p1(12, 13);
	p1.print();
	
	// p2 생성자에 p1의 객체를 삽입한 것을 알 수 있다.
	CPoint p2(p1);
	p2.print();
	
	// p1의 객체를 변경
	p1.x = 123;
	p1.y = 345;
	
	p2.print(); // 123 : 345
	p1.print(); // 12 : 13
	
	return 0;
}

디폴트 복사 생성자

CString 클래스의 복사 생성자

profile
설명이 가능할 때까지 공부하기.

0개의 댓글