안녕하세요. 하학생입니다.
오늘은 복사 생성자와 소멸자에 대해 공부해 봤습니다.
잘 봐주세요!
얕은 복사 : 객체가 가진 멤버들의 값을 새로운 객체로 복사하는데 참조 타입의 멤버를 가지고 있다면 참조 값만 복사됩니다.(동적 할당일시 주소값을 공유)
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;
}
다음 예제와 같이 진행하면 객체가 복사되는 것을 알 수 있습니다.
복사 생성자란 새롭게 생성된 객체가 원본 객체와 같으면서 완전한 독립선을 가진 생성자입니다.
복사생성자가 깊은 복사를 통한 복사입니다.
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를 복사할 수 있습니다.
소멸자란 객체가 소멸될 때 자동으로 실행되는 클래스의 멤버 함수입니다.
객체가 메모리에서 해제되기 전에 필요한 정리 작업을 수행하는 데 주로 사용됩니다.
~ClassName();
//소멸자 원형
다음은 소멸자 원형입니다.
#include <iostream>
class MyClass {
public:
// 생성자
MyClass() {
std::cout << "생성자 호출" << std::endl;
}
// 소멸자
~MyClass() {
std::cout << "소멸자 호출" << std::endl;
}
};
int main() {
MyClass obj; // 객체 생성 (생성자 호출)
// 객체가 블록을 벗어날 때 소멸자 호출
// 객체가 메모리에서 해제될 때 소멸자 호출
return 0;
} // 블록 끝 (소멸자 호출)
소멸자를 이용한 간단한 예시입니다.
다음같이 이용하면 객체가 블록을 벗어날 때 소멸자가 호출됩니다.
소멸자의 호출 시기는 컴파일러가 알아서 처리해 줍니다.
메모리 영역 | 소멸자 호출 시기 |
데이터 영역 | 프로그램 종료시 |
스택 영역 | 객체가 정의된 블록을 벗어 날때 |
힙 영역 | delete를 이용하여 객체의 메모리를 반환할때 |
임시 객체 | 임시 객체의 사용을 끝냈을때 |
오늘은 복사 생성자와 소멸자에 대해 공부를 진행해 봤습니다. 정말 어렵네요. 다음 포스팅에서 뵐게요 이만!
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 |
댓글 영역