By zieckey (http://blog.chinaunix.net/u/16292/)
Trend科技的一道面试题:
请看下面的程序,说说会出现什么问题?
#include
#include
#include
using namespace std;
class CDemo {
public:
CDemo():str(NULL){};
~CDemo()
{
if(str) delete[] str;
};
char* str;
};
int main(int argc, char** argv) {
CDemo d1;
d1.str=new char[32];
strcpy(d1.str, "trend micro");
vector *a1=new vector();
a1->push_back(d1);
delete a1;
return EXIT_SUCCESS;
}
这个程序在退出时,会出问题,什么问题?重复delete同一片内存,程序崩溃。
我们把析构函数改为如下,可以更清楚的看到这一点:
~CDemo()
{
if(str)
{
static int i=0;
cout<<"&CDemo"<管理员在2009年8月13日编辑了该文章文章。
-->
阅读(2458) | 评论(2) | 转发(0) |