El siguiente código funciona bien para Visual C++ 2008. Sin embargo, cuando se trata de Visual C++ 6, aparece el siguiente error. Puedo saber por qué y cómo puedo solucionar el error, pero aún así hacer que el destructor permanezca en privado.Por qué se queja Visual C++ 6 en destructor privado
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': no se puede miembro privado de acceso declarado en la clase 'X' C: \ Projects \ ttt6 \ main.cpp (175): véase la declaración de 'X :: ~ X'
¿No deberían los constructores/destructores ser siempre públicos? – vpram86
@Aviator: los constructores no siempre deben ser públicos. Ejemplos: para una clase abstracta, solo quieres clases derivadas que llamen al constructor (así puedes evitar la creación de instancias de la clase abstracta), por lo que la haces 'protected'. Para los singletons solo quieres el método estático 'CreateInstance()' de la clase para crear una instancia, por lo que haces que el constructor sea 'private'. –
@Scott: Muchas gracias. Lo entiendo ahora – vpram86