반응형
복사 생성자 (Copy Constructor)란?
객체가 자신과 동일한 타입의 객체로 초기화 될 때 호출되는 생성자
class A
{
int no;
char ch;
public:
A(const A & ra); // 복사생성자함수
};
[예시] 복사 생성자
p2는 Point(int) 필요하지만
Point(Point) 형태로 복사 생성자로 build error 발생 X
class Point
{
int x;
int y;
public:
Point() : x{ 0 }, y{ 0 } {}
Point(int a, int b) : x{ a }, y{ b } {}
};
int main()
{
Point p1(1, 2); // ok
// Point p2(1); // error
Point p3(p1); // ok
}
사용자가 복사 생성자를 제공하지 않으면
컴파일러가 디폴트 복사생성자 제공하며
멤버 데이터를 1:1로 대입하는 형태로 만들어진다.
// 복사 생성자 형태
Point p2(p1);
Point p2{p1};
Point p2 = p1;
Point p2 = {p1};
// 대입 형태
A::A(const A& ra)
{
no = ra.no;
ch = ra.ch;
}
Q) 디폴트 생성자와는 어떤 차이가 있을까?
복사 생성자는 사용자가 「복사생성자」를 만들지 않으면 컴파일러가 제공해주는 반면
디폴트 생성자는 어떤 종류의 생성자도 만들지 않으면 컴파일러가 제공한다.
#include <iostream>
class Point
{
int x, y;
public:
Point(const Point& p) : x{ p.x }, y{ p.y }
{
std::cout << "복사 생성자" << std::endl;
}
};
int main()
{
Point p1; // error
Point p2{ p1 };
}
복사 생성자가 있기 때문에 디폴트 생성자가 만들어지지 않는다.
그렇기에 p1 에서 Build Error 발생
반응형
'프로그래밍 언어 > C++' 카테고리의 다른 글
[C++] default 생성자 요청 (2) | 2025.02.05 |
---|---|
[C++] default member initializer (1) | 2025.02.02 |
[C++] 클래스 파일 분할 (4) | 2025.01.30 |
[C++] constexpr function (1) | 2025.01.29 |
[C++] member initializer list (1) | 2025.01.29 |
댓글