Le code suivant fonctionne correctement pour Visual C++ 2008. Toutefois, lorsque vient à Visual C++ 6, j'obtiens l'erreur suivante. Puis-je savoir pourquoi, et comment je peux réparer l'erreur, mais toujours faire le destructeur reste en privé.Pourquoi Visual C++ 6 se plaint sur le destructeur privé
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): erreur C2248: 'X :: ~ X': ne peut pas accéder à un membre privé déclaré dans la classe 'X' C: \ Projects \ ttt6 \ main.cpp (175): voir la déclaration de « X :: ~ X »
Les constructeurs/destructeurs ne devraient-ils pas toujours être publics? – vpram86
@Avocator: Les constructeurs ne devraient pas toujours être publics. Exemples: Pour une classe abstraite, vous ne voulez que des classes dérivées appelant le constructeur (c'est comme cela que vous pouvez empêcher l'instanciation de la classe abstraite), donc vous le faites 'protected'. Pour les singletons, vous ne voulez que la méthode 'CreateInstance()' statique de la classe pour créer une instance, de sorte que le constructeur soit 'private'. –
@Scott: Merci beaucoup. Je le comprends maintenant. – vpram86