[英]How to properly implement a C++ class destructor
在 class (沒有直接指針成員)中,我看到定義析構函數有以下 3 種可能性。
class Child : public Parent
{
public:
// ~Child() override {} // (1) explicit destructor with empty body
// ~Child() override = default; // (2) explicit default destructor
// // (3) implicit default destructor
private:
// members
}
可以/應該始終避免選項(1)
嗎? 因為如果我使用選項(1)
,Clang-Tidy 會提示我選擇選項(2)
)。
一般來說,這三種不同的選項之間有什么區別? 選擇其中之一時應考慮什么?
可以/應該始終避免選項(1)嗎?
假設語言的非古代版本,是的。 據我所知,使用空的非默認析構函數的唯一原因是支持 C++03 和舊標准。
選擇其中之一時應考慮什么?
override
說明符)。作為一個粗略的經驗法則,如果可能,請使用 3.。 如果不可能(例如,上面描述的 PIMPL 案例),則使用 2。如果不可能(即您需要支持 C++03),則使用 1。
可以/應該始終避免選項(1)嗎?
如果你沒有任何東西可以放入析構函數,那么你應該讓編譯器為你生成一個default
的析構函數,所以是的。
一般來說,這三種不同的選項之間有什么區別?
假設沒有什么特別的東西需要放入你的析構函數中:
您將析構函數鎖定為空,如果發生變化,您可能會忘記將它們添加到析構函數中。
讓編譯器弄清楚這一切,並在代碼中顯示你這樣做。
讓編譯器把它弄清楚,不要在代碼中顯示你這樣做。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.