2
複製構造函數調用默認構造函數的同時在C++中創建對象?如果我隱藏默認的構造函數,我應該仍然能夠創建副本,對吧?複製構造函數調用默認構造函數以創建對象
複製構造函數調用默認構造函數的同時在C++中創建對象?如果我隱藏默認的構造函數,我應該仍然能夠創建副本,對吧?複製構造函數調用默認構造函數以創建對象
刪除默認構造函數並不妨礙您複製對象。當然,您需要一種方法來首先生成對象,即您需要提供一個非默認構造函數。
struct Demo {
Demo() = delete;
Demo(int _x) : x(_x) { cout << "one-arg constructor" << endl; }
int x;
};
int main() {
Demo a(5); // Create the original using one-arg constructor
Demo b(a); // Make a copy using the default copy constructor
return 0;
}
當你寫你自己的拷貝構造函數,你應該將呼叫路由到與參數的適當的構造,就像這樣:
struct Demo {
Demo() = delete;
Demo(int _x) : x(_x) { cout << "one-arg constructor" << endl; }
Demo(const Demo& other) : Demo(other.x) {cout << "copy constructor" << endl; }
int x;
};
目前尚不清楚你在想什麼「默認構造函數」。當你的代碼沒有它們並且你沒有指定一個明確的'delete'時,C++會提供默認的構造函數。然後有無參數的構造函數也被稱爲「默認」,但是你的類不需要具有其中的一個。 – dasblinkenlight
不管我的問題。兩者都是默認的,我不在乎它是編譯器生成的還是程序員定義的。 – Narek