2015-01-29 25 views
5

Widziałem konstruktora = usuń wyjaśnienie here, ale zastanawiam się, czy powinienem również zabronić połączeń destruktor. Próbuję użyć klasy podobnej do tej:C++ 11 Destructor = delete

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

Czy powinienem również napisać jak ~A() = delete;? Czy to ma znaczenie?

+22

Wygląda na to, że autorowi tego kodu lepiej byłoby użyć 'namespace A'. –

Odpowiedz

9

~A() = delete; jest zbędny, ponieważ ponieważ nie można utworzyć obiektu, nie ma sensu martwić się o destruktor.

W rzeczywistości z twoim kodem nawet nie ma potrzeby A() = delete;, ponieważ wszyscy członkowie klasy to static.
Jak słusznie wspomniał Luchian w komentarzu, takie class są lepiej zadeklarowane jako namespace. Dane bazowe mogą być wykonane extern/static w zależności od wymagań.

+3

Musi być koderem Java w remisji. Te są zmuszone do korzystania z klas, choćby niestosowne. – Deduplicator

+1

@Deduplicator, faktycznie OP odnosi się tylko do pytania LuchianGrigore, a on nie jest koderem Java. On sam skomentował to pytanie. :-) Wiem, że jest dobry w C++. – iammilind

+1

Właśnie na to patrzyłem. Musiałeś mieć na myśli odpowiedź, a on tego nie zaleca, po prostu komentując różnicę w deklarowaniu jej jako prywatnej ... Przyznaję, że wygląda dobrze zorientowany w C++. – Deduplicator

3

Nie, to nie ma znaczenia. Możesz go również usunąć, ale jeśli konstruktor zostanie usunięty, usunięcie destruktora nie spowoduje niczego dodatkowego.

Pierwszy (usunięty konstruktor) mówi, że nie można tworzyć obiektów. Drugi (usunięty destruktor) mówi, że nie można niszczyć obiektów.

Należy zanotować, że możliwe jest "tworzenie" i inicjowanie obiektów przy użyciu różnych hacków, ale w takich przypadkach wszystkie zakłady są wyłączone, a program wykonuje nieokreślone zachowanie.