此代碼在C++中有效嗎?C++數組是否可複製構造?
class MyClass
{
public:
Class2 array [100];
Myclass (const Myclass& other) : array (other.array) {}
};
如果不是,達到相同結果的最佳方法是什麼?
此代碼在C++中有效嗎?C++數組是否可複製構造?
class MyClass
{
public:
Class2 array [100];
Myclass (const Myclass& other) : array (other.array) {}
};
如果不是,達到相同結果的最佳方法是什麼?
無論這是否有效,如果您的所有拷貝構造函數都是拷貝數組,那麼我寧願避免編寫它,讓編譯器隱式生成一個拷貝。
另外,我建議按照C++ 11 chris's advice並使用std::array
而不是C風格的數組:
#include <array>
class MyClass
{
public: // In case you really want this to be public
std::array<Class2, 100> arr;
};
順便說一句,這也將讓您初始化您在拷貝構造函數的數組初始化列表(但再次,這樣做只是如果需要的話):
class MyClass
{
public:
MyClass() { }
MyClass (const MyClass& other) : arr(other.arr) {}
// ^^^^^^^^^^^^^^
private:
std::array<Class2, 100> arr;
};
這裏是一個live example。
在C++數組中不能顯式複製(不可複製構造,不可賦值)。你的代碼不會編譯。
然而,在C++數組中,當被包裝到類中時,它們變成間接可複製的。這意味着如果你刪除了你的構造函數定義,那麼編譯器爲你的類MyClass
生成的隱式拷貝構造函數實際上會成功地通過一些「魔術」方法來複制數組,而這些方法直接不可用。
但是,如果由於某種原因,你必須明確地定義拷貝構造函數,那麼你的選擇被限制離開陣列默認初始化,然後通過std::copy
或類似的東西明確拷貝構造函數的主體中的數據。或者你可以簡單地重新包裝你的數組,這實際上是已經建議的std::array
可以爲你做的。
或者OP可以使用'std :: array <>'並且享受魔法:) –
好吧,我需要明確地定義一個拷貝構造函數。除了數組之外,該類還涉及需要深度複製的其他成員數據。謝謝 :) – jbgs
使用'std :: array'。 – chris