Il seguente codice funziona correttamente per Visual C++ 2008. Tuttavia, quando arriva a Visual C++ 6, ottengo il seguente errore. Posso sapere perché, e come posso correggere l'errore, ma mantenere comunque il distruttore in privato.Perché Visual C++ 6 si lamenta sul distruttore privato
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): l'errore C2248: 'X :: ~ X': non può accedere membro privato dichiarato nella classe 'X' C: \ Projects \ ttt6 \ main.cpp (175): vedi dichiarazione di 'X :: ~ X'
I costruttori/distruttori non dovrebbero essere sempre pubblici? – vpram86
@Aviatore: i costruttori non dovrebbero essere sempre pubblici. Esempi: per una classe astratta, si desidera solo che le classi derivate chiamino il costruttore (è così che è possibile impedire l'istanziazione della classe astratta), in modo da renderlo 'protected'. Per i singleton si desidera solo il metodo statico 'CreateInstance()' per creare un'istanza, in modo da rendere il costruttore 'private'. –
@Scott: Grazie mille. Lo capisco adesso. – vpram86