2012-05-06 21 views
25

A veces no deseo proporcionar un constructor predeterminado, ni quiero que el compilador proporcione un constructor predeterminado del sistema para mi clase. En C++ 11 Puedo hacer algo como:¿Cómo eliminar el constructor predeterminado?

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

Pero actualmente mi profesor no me permite hacer eso en mi asignación. La pregunta es: antes de C++ 11, ¿hay alguna manera de decirle al compilador que deje de proporcionar implícitamente un constructor predeterminado?

Respuesta

34

yo diría que sea privada .. algo así como

class MyClass 
{ 
private: 
    MyClass(); 
} 

y nadie (desde fuera de la propia clase o clases amigo) será capaz de llamar al constructor por defecto. Además, tendrá tres opciones para usar la clase: ya sea para proporcionar un constructor parametrizado o usarlo como una clase de utilidad (una con funciones estáticas solamente) o para crear una fábrica para este tipo en una clase de amigo.

+0

Scott Meyers en su libro Effective Modern C++ escribe, que también puede dejar su constructor privado sin definición. Te ayudará a proteger tu constructor predeterminado de invocar desde clases de amigos (se lanzará un error de enlace). – MrPisarik

12

Sure. Defina su propio constructor, predeterminado o de lo contrario.

También puede declararlo como privado para que sea imposible llamarlo. Desafortunadamente, esto haría que tu clase fuera completamente inutilizable a menos que proporciones una función estática para invocarla.

Cuestiones relacionadas