编程论坛
注册
登录
编程论坛
→
C++教室
这个问题有点纠结
lonely_21
发布于 2011-12-08 12:46, 683 次点击
请问哪种函数在主函数结束后回被调用?
有静态对象的析构函数,还有哪些呀?
7 回复
#2
cosam
2011-12-09 15:32
你有这方面的问题么,问得太笼统,不知道如何回答。
#3
我是菜鸟C
2011-12-09 19:11
全局变量的delete算不算。
#4
lonely_21
2011-12-09 20:57
回复 2楼 cosam
这个也是在主函数结束后调用吗?请问调用几次?因为我写了一个程序,似乎在VC下主函数结束后调用了三次?
#include<iostream.h>
#include<malloc.h>
#include<new.h>
#include<stdio.h>
#include "tt.h"
void *operator new(size_t sz,const char *file,const int line)
{
cout<<sz<<" "<<file<<" "<<line<<endl;
return malloc(sz);
}
void operator delete(void *p)
{
printf("free \n");
printf("%x\n",p);
char s=*(char*)p;
printf("%d,%c\n",s,s);
free(p);//???
}
#define new new(__FILE__,__LINE__)
void main()
{
Test *p=new Test();
delete p;
}
就这个函数,总共调用了三次delete,为什么
#5
lonely_21
2011-12-09 20:57
回复 楼主 lonely_21
那就笼统的回答呀
#6
飞扬_佳
2011-12-09 21:19
#7
rjsp
2011-12-10 08:14
回复 4楼 lonely_21
鬼知道你的Test是如何定义的呀
#8
lonely_21
2011-12-10 23:43
回复 6楼 飞扬_佳
啊啊啊,复制错了,
class Test
{
public:
Test()
{
cout<<"Create Test: "<<this<<endl;
}
~Test()
{
cout<<"Destroy Test: "<<this<<endl;
}
};
就这样,这个问题今天解决了,是因为在调用exit()结束主函数时,可能在头文件中包含的有对象,所以要调用delete去析构,析构的时候调用了自定义的delete,所以才会显示有那样的结果,谢谢啦
1