如何避免类中的破坏

时间:2015-04-27 10:25:03

标签: c++ oop

我有一个问题,我怎么能避免课堂上的破坏。 我在这里有示例代码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可以返回主要。感谢

2 个答案:

答案 0 :(得分:2)

您可以定义移动和/或复制构造函数(如果它未被隐式定义),并且值将在销毁之前移动/复制。

答案 1 :(得分:0)

由于NRVO(名为返回值优化),您可以提供复制ctor,而不是编译器从不调用它。

阅读此维基:http://en.wikipedia.org/wiki/Return_value_optimization

使用C ++ 11 o C ++ 14,您可以使用移动语义,这是一种移动昂贵对象的通用技术。