SW개발/C++

6장. 복사 생성자와 임시 객체

코코도롱 2025. 2. 26. 16:30
반응형

복사 생성자

복사 생성자는 기존 객체를 복사하여 새로운 객체를 생성할 때 호출됨.

class MyClass {
public:
    MyClass(const MyClass &obj) {
        cout << "복사 생성자 호출" << endl;
    }
};

임시 객체와 보이지 않는 복사 생성

함수 반환 시 반환된 객체는 임시 객체로 간주되며, 보이지 않는 복사 생성이 일어날 수 있음.

Shallow copy, Deep copy

Shallow copy는 객체 내부의 포인터만 복사하는 반면, Deep copy는 포인터가 가리키는 대상까지 새로 복사하는 방식임.

class MyClass {
private:
    int* data;
public:
    MyClass(int val) { data = new int(val); }
    MyClass(const MyClass &obj) {
        data = new int(*obj.data); // Deep copy
    }
};

묵시적 변환 및 허용되는 변환

C++에서는 변환 생성자를 정의하여 한 타입에서 다른 타입으로 변환될 수 있음.

class MyClass {
public:
    MyClass(int val) {}
};

r-value 참조

r-value 참조는 임시 객체를 참조할 수 있도록 하는 기능이며, 이동 시맨틱을 지원하기 위한 필수 요소임.

int &&rdata = 10 + 5;

이동 시맨틱

이동 시맨틱을 활용하면 불필요한 객체 복사를 줄일 수 있으며, 성능 향상에 기여함.

class MyClass {
public:
    MyClass(MyClass &&obj) {
        cout << "이동 생성자 호출" << endl;
    }
};
반응형