我是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
对象。显然,编译器在这种情况下没有帮助我。