最初に私の頭に浮かぶのは、オブジェクトを動かすことです。
新しい演算子でクラス内にメモリを割り当てたとします。
struct A
{
A()
{
data = new int[50];
}
void destroy()
{
delete [] data;
}
A (const A& copy)
{
data = copy.data;
}
int* data
}
このオブジェクトをコピーしたいとします。なぜすべてのデータをコピーするのではなく、データにポインタをコピーするだけです。
A calculateA()
{
A returnVal;
for (int i = 0; i < 50; i++)
returnVal.data[i] = i;
return returnVal;
}
この場合、浅いコピーが有利です。
A (const A& copy)
{
data = copy.data;
}
A newA = calculateA();
// do stuff with newA
newA.destroy();
他にも何千もの理由があると確信しています。
コピーをダブルクリックしないようにするには、コピーをnullに設定します。
#include <iostream>
#include <utility>
struct A
{
A()
{
data = new int[50];
}
~A()
{
if (data)
delete [] data;
}
A (A& copy)
{
data = copy.data;
copy.data = nullptr;
}
int* data;
};
int main()
{
A aVal;
for (int i = 0; i < 50; i++)
aVal.data[i] = i;
A anotherVal = aVal;
int i = 10;
while (i--)
std::cout << anotherVal.data[i];
}
あなたの例では、T&around、参照(または場合によってはポインタ)をルートオブジェクトに渡すことを話しています。 – vijay267