簡體   English   中英

為什么帶有用戶聲明的析構函數的類具有隱式默認構造函數?

[英]Why does a class with a user-declared destructor have an implicitly defaulted constructor?

碼:

struct A
{ 
    ~A(){ };
};

A::A(){ }; //error: definition of implicitly declared default constructor

int main()
{
    A a;
}

演示

為什么代碼會產生錯誤? 我希望程序可以正常編譯。 標准說N3797::12.8/7 [class.copy]

如果類定義未明確聲明一個副本構造函數,則將隱式聲明一個副本構造函數。 如果類定義聲明了move構造函數或move賦值運算符,則隱式聲明的copy構造函數將定義為delete; 否則,將其定義為默認值(8.4)。 如果 該類具有用戶聲明的副本分配運算符或用戶聲明的 析構函數, 則不建議使用后一種情況

是錯誤還是我的誤會?

struct A
{ 
  ~A(){ };
   A();
};

A::A(){ }; //here you can define default constructor

int main()
{
 A a;
}

您已經定義了顯式析構函數而不是構造函數,請添加構造函數declarartion並將其定義為外部類

您可能無法通過編譯器定義隱式聲明的構造函數。

從C ++標准(12個特殊成員函數)開始

  1. ...程序不得定義隱式聲明的特殊成員函數

暫無
暫無

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

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