簡體   English   中英

對於C ++中的靜態類(帶有私有構造函數),我應該定義一個析構函數嗎?

[英]For a static class (with private constructor) in C++, should I define a destructor?

我在C ++中有一個靜態類,即該類的所有成員都是靜態的。

由於我不希望再實例化該類,因此我將構造函數設為私有。 我沒有為此類定義默認的副本分配運算符或副本構造函數,因為它永遠無法實例化。 但是,我的靜態代碼分析器告訴我:

如果由於類管理資源而聲明了析構函數,則出於相同的原因,您可能還想聲明一個拷貝構造函數和一個拷貝賦值運算符。

->如果不為此類定義析構函數,可以嗎? 因為它永遠無法創建,所以我也無法銷毀它?

->這是一個好習慣嗎? 我的設計有什么問題嗎?

由於我不希望再實例化該類,因此我將構造函數設為私有。

如果可以訪問C ++ 11編譯器,則有一個更好的選擇:您可以顯式刪除編譯器提供的“免費”構造函數 這應該解決析構函數的問題,因為編譯器會知道不可能構造您的類。

如果您不能使用已刪除的構造函數功能,則聲明構造函數私有應該足以防止外部實例化。 析構函數不是必需的,因為沒有什么要破壞的。

這是一個好習慣嗎? 我的設計有什么問題嗎?

在無法定義獨立功能/變量的語言中,這種做法更為常見。 另一方面,C ++提供獨立的函數和變量。 這兩個功能與名稱空間的結合使僅具有靜態成員的類成為不必要:此類類在功能上等同於名稱空間,但對於C ++而言並不是慣用的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM