c++运算符重载,则调用析构函数
c++ operator overloading, destructor is called
我正试图跟踪一个给定类创建了多少对象。如果我重载类中的运算符++,就会调用析构函数,但我不知道为什么。更具体地说:
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执行结束。销毁…
所以在++i和i++之后,会调用析构函数,但为什么呢?
非常感谢!
这是因为您返回了一个副本。您可能希望创建一个复制构造函数。
您在++运算符中返回对象的副本。
每次调用return *this
时,实际上都会创建一个对象的副本,并将其传递给调用代码。
这是因为"operator++()"方法都返回一个"int32"的副本。因此,对于每个调用,都会创建并返回一个新实例。
相关文章:
- 什么时候调用析构函数
- C++-明确何时以及如何调用析构函数
- C++ 防止在映射中放置()时调用析构函数
- 调用析构函数以释放动态分配的内存
- C++:使用方法调用析构函数的顺序是什么?
- 向量推回调用析构函数时调用析构函数
- 如何在调用析构函数时优雅地停止/销毁带有阻塞调用C++线程?
- C++,我应该调用析构函数吗?
- 如何获取有关在 Clang LibTooling 中调用析构函数的信息?
- 当我从 std::vector 中的新放置调用析构函数时会发生什么?
- 为什么这里不调用析构函数
- 在调用 std::bind 的产品后意外调用析构函数
- 为什么在传递给函数而不是构造函数时调用析构函数?
- 如何在C++中调用析构函数
- 为什么为未删除的对象调用析构函数?
- 调用析构函数时出错
- C++ 在不释放内存的情况下调用析构函数
- 为什么在运算符删除中不调用析构函数?
- C++ 调用析构函数后动态模板队列"double free or corruption (out)"
- 在 postOrderDelete 上调用析构函数时引发的异常