컴파일러가 디폴트 생성자를 만들 수 없는 상황

클래스에 디폴트 생성자가 삭제된 멤버

C++에서 클래스에 디폴트 생성자를 삭제한 데이터 멤버가 있다면, 그 클래스의 디폴트 생성자도 자동으로 삭제된다

예시

class A
{
public:
    A() = delete;  // 디폴트 생성자 삭제
};

class B
{
    A a;  // 클래스 A를 멤버로 가짐
};

int main()
{
    B b;  // 오류: B의 디폴트 생성자가 자동으로 삭제됨
}

왜 이런일이 발생하나요?

클래스의 디폴트 생성자가 생성될 때, 모든 멤버 데이터도 초기화가 된다. 하지만 멤버 데이터 중 하나라도 디폴트 생성자를 사용하지 못한다면, 해당 멤버 변수를 초기화할 방법이 없기 때문에 컴파일러는 더이상 디폴트 생성자를 생성할 수 없다고 판단한다.

요약

클래스의 멤버 중에 디폴트 생성자가 삭제된 멤버가 있다면, 해당 클래스의 디폴트 생성자도 자동으로 삭제됩니다.

Categories:

Updated:

Leave a comment