我有一個包含大量數據的類,名爲HeavyData
。這個類遵循三條規則(它具有 覆蓋了複製構造函數,複製賦值運算符和析構函數,以便能夠在複製類時正確地複製成員變量someBigAmountOfData
,並且能夠在不導致內存的情況下釋放該類泄漏)。傳遞一個包含動態內存的類:方法及其效率
DataManager
類有兩個類型爲HeavyData
的成員變量。 (見下文)
class HeavyData
{
public:
HeavyData();
HeavyData(const HeavyData& that);
HeavyData& operator=(const HeavyData& that);
~HeavyData();
private:
void* someBigAmountOfData; //maybe a few hundred bytes (on the heap, of course)
size_t sizeOfData;
};
class DataManager
{
public:
DataManager();
//method 1
DataManager(HeavyData one, HeavyData two):
one(one),
two(two)
{
}
//method 2 (which I think is more effective than method 1)
DataManager(const HeavyData& one, const HeavyData& two):
one(one),
two(two)
{
}
private:
HeavyData one;
HeavyData two;
};
該問題:
的DataManager
類有兩個構造函數如下:
DataManager(HeavyData one, HeavyData two);
//方法1DataManager(const HeavyData& one, const HeavyData& two);
//方法2
問題在於從上面兩個選擇構造函數。你認爲哪一個更有效率?爲什麼?
認爲第二個構造函數(方法2)更高效。
也許是一堆'std :: cout'調試輸出來確認/否認你的懷疑。 – WhozCraig
爲什麼你認爲第二個更有效率? –
在'HeavyData'中使用std :: vector並遵循零規則。它會將移動語義添加到'HeavyData'中,以便將參數移動到'DataManager'中 – hansmaad