注册 登录
编程论坛 C++教室

这个问题有点纠结

lonely_21 发布于 2011-12-08 12:46, 683 次点击
请问哪种函数在主函数结束后回被调用?
有静态对象的析构函数,还有哪些呀?
7 回复
#2
cosam2011-12-09 15:32
你有这方面的问题么,问得太笼统,不知道如何回答。
#3
我是菜鸟C2011-12-09 19:11
全局变量的delete算不算。
#4
lonely_212011-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_212011-12-09 20:57
回复 楼主 lonely_21
那就笼统的回答呀
#6
飞扬_佳2011-12-09 21:19
#7
rjsp2011-12-10 08:14
回复 4楼 lonely_21
鬼知道你的Test是如何定义的呀
#8
lonely_212011-12-10 23:43
回复 6楼 飞扬_佳
啊啊啊,复制错了,
class Test
{
public:
    Test()
    {
        cout<<"Create Test: "<<this<<endl;
    }
    ~Test()
    {
        cout<<"Destroy Test: "<<this<<endl;
    }
};
就这样,这个问题今天解决了,是因为在调用exit()结束主函数时,可能在头文件中包含的有对象,所以要调用delete去析构,析构的时候调用了自定义的delete,所以才会显示有那样的结果,谢谢啦
1