컴파일러가 디폴트 생성자를 만들 수 없는 상황
클래스에 디폴트 생성자가 삭제된 멤버
C++에서 클래스에 디폴트 생성자를 삭제한 데이터 멤버가 있다면, 그 클래스의 디폴트 생성자도 자동으로 삭제된다
예시
class A
{
public:
A() = delete; // 디폴트 생성자 삭제
};
class B
{
A a; // 클래스 A를 멤버로 가짐
};
int main()
{
B b; // 오류: B의 디폴트 생성자가 자동으로 삭제됨
}
왜 이런일이 발생하나요?
클래스의 디폴트 생성자가 생성될 때, 모든 멤버 데이터도 초기화가 된다. 하지만 멤버 데이터 중 하나라도 디폴트 생성자를 사용하지 못한다면, 해당 멤버 변수를 초기화할 방법이 없기 때문에 컴파일러는 더이상 디폴트 생성자를 생성할 수 없다고 판단한다.
요약
클래스의 멤버 중에 디폴트 생성자가 삭제된 멤버가 있다면, 해당 클래스의 디폴트 생성자도 자동으로 삭제됩니다.
Leave a comment