我正在尝试跟踪一个给定类创建了多少个对象。如果我在类中重载操作符++,析构函数就会被调用,但我不知道为什么。更具体地说:
class num{
public:
virtual void setValue(int)=0;
static int db;
num(){}
~num(){}
};
int num::db = 0;
class int32: public num{
public:
// GET
int getValue();
// SET
void setValue(int f);
// constructor
int32()
{
cout << "Construction..."<<endl;
this->value = 0;num::db++;
}
// destructor
~int32()
{
cout << "destruction..."<<endl;
num::db--;
}
// operators
int32 operator++(int);
int32 operator++(void);
protected:
int value;
};
int32 int32::operator ++()
{
this->value++;
return *this;
}
int32 int32::operator ++(int)
{
this->value++;
return *this;
}
int main()
{
int32 i;
i.setValue(20);
cout << (i++).getValue()<<endl;
cout << (++i).getValue()<<endl;
cout << num::db;
cout << endl << "End of execution.";
return 1;
}
结果是:构建...21毁灭...22破坏...-1 \f25 execution.destruction-1\f6结束...
所以在++i和i++之后会调用析构函数,但是为什么呢?
非常感谢!
发布于 2013-02-18 10:24:33
这是因为你退回了一份副本。您可能希望创建一个复制构造函数。
发布于 2013-02-18 10:24:49
您将在++操作符中返回该对象的副本。
每次调用return *this
时,实际上都会创建一个对象副本,该副本将被传递给调用代码。
发布于 2013-02-18 10:25:22
这是因为您的"operator++()“方法都返回一个"int32”的副本。因此,对于每个调用,都会创建并返回一个新实例。
https://stackoverflow.com/questions/14933993
复制