【发布时间】:2011-07-23 20:38:13
【问题描述】:
我正在尝试学习有关重载运算符的教程 here:,但我发现了一些让我非常困惑的东西。
在这个网站here 上讨论了本教程,即关于如何保留类中的变量,因为整个类是按值传回的。
在尝试类定义时,我玩弄了使整数变量指针(也许不明智 - 但只是为了试验!)如下:
class CVector {
int* x;
int* y;
public:
CVector () {};
CVector (int,int);
CVector operator + (CVector);
~CVector ();
};
在类构造函数中我为两个整数分配内存,在类解构函数中我删除分配的内存。
我还调整了重载的操作符函数如下:
CVector CVector::operator+ (CVector param) {
CVector temp;
*temp.x = *x + *param.x;
*temp.y = *y + *param.y;
return (temp);
}
对于原始代码,类具有简单的整数变量,整个类的按值返回成功完成。
但是,在我将变量更改为 int 指针后,类的按值返回不成功完成,因为整数变量不再完整。
我假设当临时 CVector 超出范围并删除这些成员整数指针时,正在调用解构函数,但类本身仍按值返回。
我希望能够按值返回分配给其成员变量的内存完整的 CVector,同时确保临时 CVector 在超出范围时被正确删除。
有什么办法可以做到吗?
非常感谢!
【问题讨论】:
-
你想用这些指针做什么?
-
没什么特别的,我只是用它们替换了普通整数作为实验。