2023. 9. 10. 14:13 C++/공부
C++] 기초(14) - 복사생성자(Copy Constructor)
반응형
[들어가기 전]
복사 생성자는 동일한 클래스를 복사하여 객체를 생성할 때 사용하는 생성자이다.
[설명]
복사 생성자는 함수의 매개변수로 객체를 전달하거나, 함수 내부에서 생성한 객체를 반환하는 경우
호출되며, call-by-reference 형식의 객체 전달에서는 호출되지 않는다.
복사 생성자를 직접 정의하지 않으면 컴파일러가 기본 복사 생성자를 내부적으로 정의하여 호출한다.
[복사 생성자의 특징]
1) 사용자 정의가 없는 경우 컴파일러가 자동으로 정의
2) 컴파일러 자동으로 정의된 복사 생성자는 얕은 복사 형식
3) 동적 메모리 할당이 생성자 내부에서 수행되는 경우, 반드시 복사 생성자 사용자 정의
4) 복사 생성자는 정의 시 생성자의 매개변수는 & 기호로 선언
- &을 붙이지 않으면, 복사 생성자 무한루프 발생!
5) 이미 생성된 객체를 다른 객체에 복사하는 경우 복사 생성자 호출 안됨
ex)
class Constructor
{
public:
int m_nVal;
Constructor()
{
m_nVal = 0;
std::cout << "기본 생성자 호출" << std::endl;
}
Constructor(int nVal)
{
m_nVal = nVal;
std::cout << "입력 생성자 호출" << std::endl;
}
Constructor(const Constructor& other)
{
m_nVal = other.m_nVal;
std::cout << "복사 생성자 호출" << std::endl;
}
void print()
{
std::cout << this->m_nVal << std::endl;
}
};
[복사 생성자 호출 시점]
1) 같은 종류의 객체로 초기화 하는 경우
int main(void)
{
Constructor c1(1);
Constructor c2(c1); // 복사 생성자 호출
}
2) 객체를 함수에 전달하는 경우
void Plus(Constructor cIn)
{
cIn.m_nVal++;
}
int main(void)
{
Constructor c1;
Plus(c1); // 복사 생성자 호출
}
3) 함수에서 객체를 반환하는 경우
Constructor Insert(int nVal)
{
Constructor c1;
c1.m_nVal = nVal;
return c1; // 복사 생성자 호출
}
int main(void)
{
Constructor c1 = Insert(1);
}
반응형
'C++ > 공부' 카테고리의 다른 글
C++] 기초(16) - 싱글톤(Singleton) 디자인 패턴 (0) | 2024.03.17 |
---|---|
C++] 기초(15) - 정적 변수/함수(Static Variable/Func) (0) | 2023.09.27 |
C++] 기초(13) - 소멸자(Destructor) (0) | 2017.11.25 |
C++] 기초(12) - 생성자(Costructor) (0) | 2017.11.25 |
C++] 기초(11) - 캡슐화(Encapsulation) (0) | 2017.10.15 |