Poniższy kod działa poprawnie w przypadku programu Visual C++ 2008. Jednak w przypadku programu Visual C++ 6 pojawia się następujący błąd. Mogę wiedzieć, dlaczego i jak mogę naprawić błąd, ale nadal sprawi, że destruktor pozostanie w prywatnym.Dlaczego program Visual C++ 6 narzeka na prywatny destruktor
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: \ Projects \ ttt6 \ main.cpp (178): error C2248: 'X :: ~ X': nie ma dostępu do prywatnych członka zadeklarowana w klasie 'X' C: \ Projects \ ttt6 \ main.cpp (175): patrz deklaracja „X :: ~ X”
Czy konstruktory/destruktory nie powinny być zawsze publiczne? – vpram86
@Aviator: Konstruktorzy nie zawsze powinni być publiczni. Przykłady: W przypadku klasy abstrakcyjnej potrzebujesz tylko klas pochodnych wywołujących konstruktor (w ten sposób można zapobiec tworzeniu wystąpienia klasy abstrakcyjnej), więc staje się ona "chroniona". W przypadku singletonów, do utworzenia instancji wymagana jest tylko statyczna metoda 'CreateInstance()' klasy, więc konstruktor staje się "prywatny". –
@Scott: Wielkie dzięki. Rozumiem to teraz. – vpram86