可能重复:
为什么没有为函数返回的对象调用析构函数?
我写了一些 C++ 代码(如下),用 GCC 4.6 编译它并成功运行。但我不知道为什么classA
从createA()
.
由于ca
是一个局部变量createA()
(即在堆栈上),我认为从函数返回时应该调用它的析构函数。但实际上,析构函数只在main
函数返回时被调用一次。
此外,在此测试中返回本地实例总是可以正常工作。我想知道在返回后弹出框架时在堆栈框架上返回本地实例是否安全。
这是我的代码:
#include <iostream>
#include <string.h>
class classA
{
public:
classA() { len = 0; v = 0; }
classA(int a)
{
len = a;
v = new int[a];
for (int i = 0; i < a; i++)
v[i] = 2*i;
}
~classA()
{
if (v)
{
memset(v, 0, len * sizeof(int));
delete [] v;
}
}
int *v;
int len;
};
classA createA(int a)
{
classA ca(a);
return ca;
}
using namespace std;
int main()
{
int a = 10;
classA ca = createA(a);
classA *pca = &ca;
for (int i = 0; i < a; i++)
cout << pca->v[i];
cout << endl;
return 0;
}