【发布时间】:2014-05-27 23:32:15
【问题描述】:
我有以下代码。每次调用构造函数时,我都会增加一个计数器,每次调用析构函数时都会减少计数器。实例化三个类对象后,我尝试打印出计数器值。然后我尝试在删除其中一个对象后再次打印出计数器值。预期值为 4 和 3,但我得到的是 2 和 1。
我实际上尝试在 Constructor 和 Destructor 中打印出一些东西来观察它们实际被调用了多少次,但令人惊讶的是,除了我调用“删除对象”的时间之外,Destructor 还被调用了几次。是因为自动调用了析构函数吗?如果是这样,有没有办法关闭该功能来测试我的代码?
** 代码原本在类中有 Add 和 Mult 函数,但我在这里省略了,因为函数的细节在这里似乎无关紧要。
#include <iostream>
using namespace std;
class Complex{
private:
double x, y;
static int count;
Complex Add(Complex como)
{
Complex t;
t.x=x+como.x;
t.y=y+como.y;
return t;
}
Complex Mul(Complex como)
{
Complex t;
t.x=(x*como.x)-(y*como.y);
t.y=(y*como.x)+(x*como.y);
return t;
}
public:
Complex(double a=0, double b=0) : x(a), y(b) {count++;}
~Complex() {count--;}
void Print() {cout << "(" << x << ", " << y << ")" << endl;}
static int GetCount() {return count;}
};
int Complex::count=0;
int main()
{
Complex com1(1.0, 2.0), com2(3.0, 4.0);
Complex com3;
com1.Print(); cout << endl;
com2.Print(); cout << endl;
com3 = com1.Add(com2); com3.Print(); cout << endl;
Complex *pcom4 = new Complex;
*pcom4 = com1.Mul(com2); pcom4->Print(); cout << endl;
cout << "#complex numbers = " << com1.GetCount() << endl;
delete pcom4;
cout << "#complex numbers = " << com1.GetCount() << endl;
return 0;
}
【问题讨论】:
-
你不显示 Mul 和 Add 的定义,复制它们的参数吗?
-
我只是假设
Add和Mul的参数是不是 引用(任何类似的)。 -
对不起,我刚刚添加了定义!
-
This may help explain why。注意实现的 copy-ctor。
-
旁注: Print 方法应该是静态的,因此它不需要调用 Complex 的实例。然后在类外用 Complex::Print() 调用它。
标签: c++ class object constructor destructor