我有一个问题,我怎么能避免课堂上的破坏。 我在这里有示例代码C ++:
class Array {
int *p;
int n;
public:
Array(int n_ = 0) {
p = new int[n_];
}
~Array(void) {
cout << "Deleted" << endl; delete []p;
}
friend Array operator+(Array A, Array B) // the amount of elements A and B are the same
{
Array S(A.n);
for(int i=0; i < A.n; i++)
S.p[i] = A.p[i] + B.p[i];
return S; // object S has been destroyed before returned.
}
};
在这里,当对象获得值并返回时。但物体S在返回之前已经被破坏所破坏。任何人都可以帮助我避免破坏或某种方式的对象S可以返回主要。感谢
答案 0 :(得分:2)
您可以定义移动和/或复制构造函数(如果它未被隐式定义),并且值将在销毁之前移动/复制。
答案 1 :(得分:0)
由于NRVO(名为返回值优化),您可以提供复制ctor,而不是编译器从不调用它。
阅读此维基:http://en.wikipedia.org/wiki/Return_value_optimization
使用C ++ 11 o C ++ 14,您可以使用移动语义,这是一种移动昂贵对象的通用技术。