이동 생성자

이동 생성자(move constructor)는 C++11부터 도입된 개념으로, 객체의 소유권을 다른 객체로 이동시키는 기능을 제공합니다. 이동 생성자는 복사 생성자와 비슷한 역할을 하지만, 소유권을 이전하는 것이 다른 점입니다.

이동 생성자는 이동 대상 객체의 데이터 멤버를 새로 생성되는 객체에 “훔쳐오는” 형태로 작동합니다. 이로 인해 객체의 복사가 발생하지 않고, 메모리 할당 및 해제 비용을 줄일 수 있습니다.

이동 생성자를 정의하기 위해서는 다음과 같은 구문을 사용합니다:

클래스명(클래스명&& other) {
    // 데이터 멤버 이동 작업
    // other 객체의 소유권 해제
}

예를 들어, 동적으로 할당된 메모리를 가지고 있는 클래스 MyClass가 있다고 가정해봅시다. 이동 생성자를 정의하여 다른 MyClass 객체에게 소유권을 이전할 수 있습니다.

class MyClass {
public:
    int* data;
    
    MyClass() : data(new int(0)) {}
    
    // 복사 생성자
    MyClass(const MyClass& other) : data(new int(*(other.data))) {}
    
    // 이동 생성자
    MyClass(MyClass&& other) : data(other.data) {
        other.data = nullptr; // 이동된 객체는 원래 객체가 소유하던 자원을 해제하지 않아야 함
    }
    
    ~MyClass() {
        delete data;
    }
};

int main() {
    MyClass obj1;
    MyClass obj2(std::move(obj1)); // obj1의 소유권을 obj2로 이동
    // obj1은 더이상 유효하지 않은 상태가 됨
    
    return 0;
}

이동 생성자는 C++11 이후의 모던한 C++ 코드에서 자주 사용되는 중요한 개념입니다. 이를 사용하여 객체의 소유권을 효율적으로 이동 시킬 수 있으며, 메모리 관리 등의 성능 향상을 이끌어 낼 수 있습니다.

#이동생성자 #C++