存儲一個成員變量通過值:從const引用參數
class Test {
private:
HugeObject h; // Copy 1
public:
void SetObject(HugeObject hugeObject) { // Copy 2
h = hugeObject; // Copy 3
}
}
// Somewhere else
Test t();
t.SetObject(HugeObject());
這是不好的,因爲創建三個隱式拷貝。如果我將SetObject()
的參數更改爲const HugeObject& hugeObject
,這也是不好的,因爲我將存儲不再存在於該函數範圍之外的內容。
因此,防止兩次複製和存儲無效數據,我可以複製,而不是僅僅兩次:
void SetObject(const HugeObject& hugeObject) {
h = HugeObject(hugeObject); // Copy constructor
}
這是處理這種情況還是我誤解的東西有效的方法是什麼?愚蠢的優化或者根本不是優化?除了存儲指針之外,還有更好的方法嗎?
閱讀移動構造函數[這裏](https://msdn.microsoft.com/en-us/library/dd293665.aspx) – ChajusSaib