상세 컨텐츠

본문 제목

C++ 복사 생성자,소멸자

Study/C++

by Ha학생 2023. 9. 10. 16:10

본문

안녕하세요.  하학생입니다.

오늘은  복사 생성자와 소멸자에 대해 공부해 봤습니다.

잘 봐주세요!


복사 생성자

얕은 복사와 깊은 복사

얕은 복사 : 객체가 가진 멤버들의 값을 새로운 객체로 복사하는데 참조 타입의 멤버를 가지고 있다면 참조 값만 복사됩니다.(동적 할당일시 주소값을 공유)

int k =300;
int y = k;

얕은 복사의 예시입니다.  얕은 복사를 사용하는 방법은 대입 연산자(=)를 사용하면 됩니다. 

마찬 가지로 객체에도 사용할 수 있습니다. 

 

#include <iostream>

class Example {
    int value;

public:
    Example() : value(100) {} // 생성자 초기화 리스트를 사용하여 value를 100으로 초기화
};

int main() {
    Example obj; // Example 클래스의 객체 생성
    Example lll = obj;
    return 0;
}

다음 예제와 같이 진행하면 객체가 복사되는 것을 알 수 있습니다.

 

복사 생성자(copy constructor)

복사 생성자란 새롭게 생성된 객체가 원본 객체와 같으면서 완전한 독립선을 가진 생성자입니다.

복사생성자가 깊은 복사를 통한 복사입니다. 

ClassName(const ClassName &other)

복사 생성자의 원형은 다음과 같습니다.

 

복사 생성자는 다음 상황에서 사용됩니다.

1. 객체가 함수에 인수로 전달될 때

2. 함수가 객체를 반환 값으로 반환할 때

3. 새로운 객체를 같은 클래스 타입의 기존 객체와 똑같이  초기화할 때

 

#include <iostream>

class Example {
private:
    int value;

public:
    // 일반 생성자
    Example(int val) : value(val) {}

    // 복사 생성자
    Example(const Example &other) : value(other.value) {}

    void display() {
        std::cout << "Value: " << value << std::endl;
    }
};

int main() {
    // 객체 생성
    Example obj1(100);

    // 복사 생성자를 사용하여 obj1을 obj2로 복사
    Example obj2(obj1);

    // 객체 출력
    obj1.display(); // Value: 100
    obj2.display(); // Value: 100

    return 0;
}

다음과 같이 사용하면 복사생성자를 이용하여 obj2를 복사할 수 있습니다.

 


소멸자(destructor)

소멸자란 객체가 소멸될 때 자동으로 실행되는 클래스의 멤버 함수입니다.

객체가 메모리에서 해제되기 전에 필요한 정리 작업을 수행하는 데 주로 사용됩니다.

~ClassName();
//소멸자 원형

 

 

다음은 소멸자 원형입니다.

 

#include <iostream>

class MyClass {
public:
    // 생성자
    MyClass() {
        std::cout << "생성자 호출" << std::endl;
    }

    // 소멸자
    ~MyClass() {
        std::cout << "소멸자 호출" << std::endl;
    }
};

int main() {
    MyClass obj; // 객체 생성 (생성자 호출)

    // 객체가 블록을 벗어날 때 소멸자 호출
    // 객체가 메모리에서 해제될 때 소멸자 호출
    return 0;
} // 블록 끝 (소멸자 호출)

소멸자를 이용한 간단한 예시입니다.

다음같이 이용하면 객체가 블록을 벗어날 때 소멸자가 호출됩니다.

소멸자의 호출 시기는 컴파일러가 알아서 처리해 줍니다.

메모리 영역 소멸자 호출 시기
데이터 영역 프로그램 종료시
스택 영역 객체가 정의된 블록을 벗어 날때
힙 영역 delete를 이용하여 객체의 메모리를 반환할때
임시 객체 임시 객체의 사용을 끝냈을때

오늘은 복사 생성자와 소멸자에 대해 공부를 진행해 봤습니다. 정말 어렵네요. 다음 포스팅에서 뵐게요 이만!

'Study > C++' 카테고리의 다른 글

C++ 백준 10828번  (0) 2023.09.14
C++ 생성자 초기화 리스트, const,static변수 등등  (0) 2023.09.10
C++ New,Delete, Class  (0) 2023.09.06
C++ 참조자  (0) 2023.09.05
C++ 기초  (0) 2023.09.04

관련글 더보기

댓글 영역