[英]C++: Is default copy constructor affected by presence of other constructors and destructor?
我們知道 ,如果聲明了任何構造函數(包含復制構造函數),則不會隱式創建默認構造函數(不帶參數的構造函數)。 使用默認復制構造函數(執行對象的淺層復制的構造函數)會發生同樣的情況嗎? 此外,析構函數的存在是否會對此產生影響?
12.8#4 復制類對象
如果類定義沒有顯式聲明復制構造函數,則會隱式聲明一個
析構函數不起作用
這里的答案是正確的但不完整。 它們適用於C ++ 98和C ++ 03。 在C ++ 11中,如果已聲明移動構造函數或移動賦值運算符,則不會獲得復制構造函數。 此外,如果已聲明了復制賦值運算符或析構函數,則不建議隱式生成復制構造函數。 12.8 [class.copy]:
如果類定義沒有顯式聲明復制構造函數,則沒有用戶聲明的移動構造函數,並且沒有用戶聲明的移動賦值運算符,復制構造函數被隱式聲明為默認值(8.4.2)。 如果類具有用戶聲明的副本賦值運算符或用戶聲明的析構函數,則不推薦使用此類隱式聲明。
不會。除非您提供自己的復制構造函數,否則您將獲得默認的復制構造函數,並且析構函數的存在與否都沒有區別。
不,請注意
MyClass
{
template <typename T> MyClass(const T&);
};
不提供復制構造函數,並生成默認值。
除非您定義自己的復制構造函數,否則始終會創建默認的復制構造函數。 沒有參數的構造函數沒有定義任何其他構造函數,以避免調用它,因此跳過真正的構造函數的代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.