다음을 통해 공유


클래스 개체 복사

할당 작업과 초기화 작업은 모두 개체를 복사합니다.

  • 할당: 한 개체의 값이 다른 개체에 할당하면 첫 번째 개체를 두 번째 개체에 복사합니다. 따라서

    Point a, b;
    ...
    a = b;
    

    b의 값이 a에 복사되도록 합니다.

  • 초기화: 새 개체를 선언하거나, 인수를 함수에 값으로 전달하거나, 값이 함수에서 값으로 반환될 때 초기화가 발생합니다.

클래스 형식의 개체에 대해 "복사"의 의미를 정의할 수 있습니다. 예를 들어 다음 코드를 고려합니다.

TextFile a, b;
a.Open( "FILE1.DAT" );
b.Open( "FILE2.DAT" );
b = a;

앞의 코드는 "FILE1.DAT의 내용을 FILE2.DAT에 복사"를 의미하거나, "FILE2.DAT를 무시하고 b를 FILE1.DAT의 두 번째 핸들로 만들기"를 의미할 수도 있습니다. 다음과 같이 각 클래스에 적절한 복사 의미를 연결해야 합니다.

  • 참조와 함께 클래스 형식에 반환 형식으로 대입 연산자 **operator=**을 사용하고, 예를 들어 ClassName& operator=(const ClassName& x); 등 const 참조를 전달하는 매개 변수를 사용합니다.

  • 복사 생성자를 사용합니다. 복사 생성자에 대한 자세한 내용은 생성자를 선언하기 위한 규칙을 참조하십시오.

복사 생성자를 선언하지 않으면 컴파일러는 member-wise 복사 생성자를 생성합니다. 복사 대입 연산자를 선언하지 않으면 컴파일러는 member-wise 복사 대입 연산자를 생성합니다. 복사 생성자의 선언은 컴파일러에서 생성된 복사 대입 연산자를 숨기지 않으며 그 반대의 경우에도 마찬가지입니다. 둘 중 하나를 구현하는 경우 다른 하나도 구현하여 코드의 의미를 분명히 하는 것이 좋습니다.

member-wise 할당에 대한 자세한 내용은 멤버 수준 할당 및 초기화를 참조하십시오.

복사 생성자는 class-name이 생성자가 정의된 클래스의 이름인 형식 class-name**&**의 인수를 사용합니다. 예를 들면 다음과 같습니다.

// spec1_copying_class_objects.cpp
class Window
{
public:
    Window( const Window& ); // Declare copy constructor.
    // ...
};

int main()
{
}

참고

가능할 때마다 복사 생성자의 인수 const class-name&의 형식을 만듭니다.이는 복사 생성자가 복사 중인 개체를 실수로 변경하는 것을 방지합니다.const 개체에서도 복사할 수 있습니다.

참고 항목

참조

특수 멤버 함수 (C++)