今天我对我的一段程序代码产生了怀疑,不能确定在循环体内创建的对象在一次循环结束时是否会调用析构函数,于是我亲手测试了一下:
#include <cstdlib>
#include <iostream>
using namespace std;
class A{
public:
A(){
cout << "A()" <<endl;
}
virtual ~A(){
cout << "~A()" << endl;
}
void seta(int n){
a = n;
}
private:
int a;
};
A fun(){
A a;
a.seta(5);
return a;
}
/*
*
*/
int main(int argc, char** argv) {
for(int i = 0; i < 5; i++){
cout << "begin"<<endl;
A a = fun();
cout << "end"<<endl;
}
cout << "for end" << endl;
return 0;
}
上面的代码可以知道,一次循环后对象是否会及时析构。运行结果如下图
分析上面的打印信息,我们会发现在赋值前系统会调用析构函数将上一次循环的对象释放掉。而且循环结束后,我们创建的对象全部得到了释放。所以这样的调用不会引起对象没有析构导致的内存泄漏,所以我的担心是多余的。