2015-01-29 17 views
5

Ho visto un costruttore = cancellare la spiegazione here ma mi chiedo se dovrei proibire anche le chiamate al distruttore. Sto cercando di usare una classe come questa:C++ 11 Destructor = delete

class A 
{ 
public: 
    static bool foo(const char* filePath); 
    static void foo(const int something); 
private: 
    A() = delete; 
    ~A(); 
}; 

Devo anche scrivere come ~A() = delete; come bene? Ha importanza?

+22

Sembra che l'autore di quel codice avrebbe potuto preferire usare 'namespace A'. –

risposta

9

~A() = delete; è ridondante, poiché poiché non è possibile creare un oggetto, non c'è motivo di preoccuparsi del distruttore.

Infatti con il tuo codice anche non c'è bisogno di A() = delete;, perché tutti i membri della classe sono static.
Come Luchian ha giustamente menzionato nel commento, tali class sono meglio dichiarati come namespace. I dati sottostanti possono essere fatti extern/static a seconda dei requisiti.

+3

Deve essere un codificatore Java in remissione. Quelli sono costretti a usare classi comunque inappropriate che siano. – Deduplicator

+1

@Deduplicator, in realtà l'OP si riferisce solo alla domanda di LuchianGrigore e non è un codificatore Java. Lui stesso ha commentato la domanda. :-) So che è bravo in C++. – iammilind

+1

Basta guardarlo. Devi aver significato la risposta, e lui non sta sostenendo di farlo, basta commentare la differenza per dichiararlo privato ... Ammetto che sembra molto esperto in C++. – Deduplicator

3

No, non importa. Puoi anche cancellarlo, ma se il costruttore viene cancellato, l'eliminazione del distruttore non farà nulla di aggiuntivo.

Il primo (costruttore eliminato) indica che non è possibile creare oggetti. Il secondo (distruttore cancellato) dice che non è possibile distruggere oggetti.

Prendere nota che è possibile "creare" e inizializzare oggetti utilizzando vari hack, ma in questi casi tutte le scommesse sono disattivate e il programma sta eseguendo un comportamento indefinito.