假設構造函數,析構函數和賦值操作符編寫正確,爲什麼我不能執行拷貝構造是這樣的:在複製構造函數內調用動態分配的類'複製構造函數?
MyClass::MyClass(const MyClass &other)
{
this->value = new Value(*(other.value));
}
大多數我看到的例子,這樣做:(因爲他們是處理通常陣列)
MyClass::MyClass(const MyClass &other)
{
Value *temp = new Value;
*temp = *(other.value);
this->value = temp;
}
但在第一個例子中,如果「新」拋出「其他」不會受到影響,如果值的拷貝構造函數拋出,也不會「新」釋放所分配的內存在宣傳例外之前?由於這是一個迷你智能指針本身,我特別避免使用std :: unique_ptr和其他智能指針。
爲什麼'value'動態地擺在首位分配呢?你試圖以高成本賦予它價值語義,並且做錯了嗎? – sehe 2013-03-18 02:17:29
值是指向另一個類的指針。也許「價值」這個名字是錯誤的詞 - 我應該使用更通用的「數據」或「其他類」。如果我是,「做錯了」,這就是爲什麼我問這個問題,因爲我不知道我是否正確地做對了。 – 2013-03-18 02:22:06
那麼,它爲什麼是一個指針?如果複製'MyClass'意味着複製'value',那只是價值聚合。 – sehe 2013-03-18 02:23:27