2012-05-06 5 views
25

가끔 기본 생성자를 제공하고 싶지 않고 컴파일러에서 내 클래스의 시스템 기본 생성자를 제공하지 못하게하려고합니다. 내 강사가 내 임무에서 그렇게 할 수 없습니다 현재기본 생성자를 삭제하는 방법은 무엇입니까?

class MyClass 
{ 
    public: 
    MyClass() = delete; 
}; 

그러나 : C++ 11에서 내가 좋아하는 일을 할 수 있습니다. 질문은 : C++ 11 이전에 암시 적으로 기본 생성자를 제공하지 않도록 컴파일러에 알리는 방법이 있습니까?

답변

34

나는 기본 생성자를 호출 할 수 있습니다 (클래스 자신이나 친구 클래스 외부에서)

class MyClass 
{ 
private: 
    MyClass(); 
} 

같은 것을 아무도 ...이 비공개로 말할 것입니다. 또한 클래스 사용을위한 세 가지 옵션, 즉 매개 변수화 된 생성자를 제공하거나 유틸리티 클래스 (정적 함수 만 포함)로 사용하거나이 클래스에 대한 팩토리를 친구 클래스에 만들 수 있습니다.

+0

Scott Meyers는 Effective Modern C++에서 저술 한 저서에서 정의없이 개인 생성자를 남겨 둘 수 있습니다. 친구 클래스에서 호출하는 기본 생성자를 보호하는 데 도움이됩니다 (링크 오류가 발생합니다). – MrPisarik

12

확실히. 기본 또는 다른 방법으로 자체 생성자를 정의하십시오.

전화를 걸 수 없도록 비공개로 선언 할 수도 있습니다. 불행히도 클래스를 호출 할 정적 함수를 제공하지 않으면 클래스를 완전히 사용할 수 없게됩니다.

관련 문제