如何通过引用

时间:2016-09-10 10:11:31

标签: c++ operator-overloading deep-copy return-by-reference

我是c ++的新手,对我试图实现的这类数值数组感到困惑。我希望有人可以给我一些建议:

class ndarray {
public:
double *data;
...
ndarray(...) { \* code to dynamically allocate data *\}
ndarray(const ndarray& A) { \* code to copy construct *\}
~ndarray() { \* code to delete data *\};

ndarray& operator=(const ndarray& A) {\* code to deep copy *\}

friend ndarray& log(const ndarray& A) { 
    ndarray B(...); 
    \* code to popularize B[i] with log(A[i])  *\
    return B; }
};
int main() {
    ndarray A(...), B(...);
    B=log(A);
}

在这里,我重载了=运算符以深层复制数据元素。在向代码插入一些输出之后,我发现B=log(A)代码通过元素创建和推广新数据数组来显式调用=运算符,即使重载的log函数通过引用返回。我的问题是,如何避免对元素进行额外的数据复制,并直接使用ndarray函数创建的log对象。显然,编译器在这种情况下没有帮助我。

0 个答案:

没有答案