다음 코드는 Visual C++ 2008에서 잘 작동합니다. 그러나 Visual C++ 6에서는 다음 오류가 발생합니다. 이유를 알 수 있고 오류를 해결할 수는 있지만 소멸자는 여전히 비공개로 유지할 수 있습니까?Visual C++ 6이 개인 소멸자에 대해 불만한 이유
class X
{
public:
static X& instance()
{
static X database;
return database;
}
private:
X() {} // Private constructor
~X() {} // Private destructor
X(const X&); // Prevent copy-construction
X& operator=(const X&); // Prevent assignment
};
int main()
{
X::instance();
}
C : 프로젝트 \ \ ttt6의 \의 MAIN.CPP (178) : 오류 C2248 : 'X :: ~ X': C 'X'클래스에서 선언 private 멤버에 액세스 할 수 없습니다 : \ 프로젝트 \ ttt6 \ MAIN.CPP (175)의 선언을 참조 'X :: ~ X'fun()
에서
생성자/소멸자가 항상 public이되어서는 안됩니까? – vpram86
@Aviator : 생성자가 항상 공개되어서는 안됩니다. 예 : 추상 클래스의 경우, 생성자를 호출하는 파생 클래스 만 필요하므로 (추상 클래스의 인스턴스화를 방지 할 수있는 방법입니다) 따라서 'protected'로 만듭니다. 싱글 톤의 경우 클래스의 정적'CreateInstance()'메소드 만 인스턴스를 생성하기를 원한다. 그래서 당신은 생성자를 private로 만든다. –
@ Scott : 고마워요. 나는 그것을 지금 이해한다. – vpram86