Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++ 복사 생성자와 대입 연산자의 차이점 완벽 정리

C++에서 복사 생성자(Copy Constructor)대입 연산자(Assignment Operator)는 모두 한 객체를 다른 객체를 기반으로 설정할 때 사용됩니다. 하지만 두 가지의 동작 방식에는 중요한 차이가 있습니다. 복사 생성자는 새로운 객체를 위해 별도의 메모리 블록을 생성하는 반면, 대입 연산자는 새로운 메모리 공간을 만들지 않고 기존 메모리 블록을 활용한다는 점입니다.

복사 생성자(Copy Constructor)란?

복사 생성자는 이미 존재하는 객체를 인자로 받아 새로운 객체를 초기화하는 특수한 생성자입니다. 클래스 내에 복사 생성자를 직접 정의하지 않으면, 컴파일러가 기본 복사 생성자를 자동으로 제공합니다.

복사 생성자 문법

classname (const classname &obj) {
   // 생성자 본문
}

대입 연산자(Assignment Operator)란?

대입 연산자(=)는 이미 생성된 두 객체 사이에 값을 전달할 때 사용됩니다. 대입 연산자를 오버로드하지 않으면 컴파일러가 기본적으로 비트 단위 복사(bitwise copy)를 수행합니다.

대입 연산자 문법

classname Ob1, Ob2;
Ob2 = Ob1;

아래 표에서 복사 생성자와 대입 연산자의 세부적인 차이점을 확인해 보세요.

복사 생성자
대입 연산자
기본적으로 오버로드된 생성자입니다.
기본적으로 하나의 연산자(operator)입니다.
이미 존재하는 객체를 이용해 새로운 객체를 초기화합니다.
이미 존재하는 두 객체 사이에 값을 대입합니다.
기존 객체를 기반으로 새로운 객체가 생성될 때 사용됩니다.
기존 객체의 값을 다른 객체에 할당하고 싶을 때 사용됩니다.
두 객체는 서로 독립적인 메모리 위치를 사용합니다.
메모리 공간을 새로 만들지 않으며, 참조 변수가 기존 메모리 블록을 가리키게 됩니다.
클래스에 복사 생성자가 정의되어 있지 않으면 컴파일러가 자동으로 제공합니다.
대입 연산자가 오버로드되어 있지 않으면 비트 단위 복사가 수행됩니다.

핵심 요약

정리하면, 복사 생성자는 새로운 객체가 생성되는 시점에 호출되어 독립적인 메모리를 확보하는 반면, 대입 연산자는 이미 존재하는 객체 간의 값 복사에 사용됩니다. 따라서 객체의 깊은 복사(deep copy)가 필요한 경우에는 복사 생성자를 적절히 구현하는 것이 안전합니다.