为什么在定位new表达式时一定要显示调用析构函数,具体的作用是怎样的》?请说明一下其中的原理

解决方案 »

  1.   

    这种说法不对。试一下下面代码,看看会不会显示ok。
    class c
    {
    public:
    c();
    };c::c()
    {
    printf("ok");
    }void main()
    {
    c* cc = new c;
    }
      

  2.   

    cnzdgs 老兄,LZ说的是西狗函数,不是构造函数.等LZ解释其真实意义...
      

  3.   

    呵呵,没注意,看到new自然想到是构造函数。不知道new与析构函数有何关系。
      

  4.   

    你也可以不调用析够函数啊,  自己写个函数 在那个函数里 delete你new出的对象。
    然后用对象调用它就好了。所谓的new出要调用析够函数,是因为把delete语句写析够函数里了而已。。再次强调, new出的东西一定要delete掉
      

  5.   

    看到7楼的回复觉得大概知道如下情况就明白了自己的问题(虽然我不清楚LZ到底是啥问题- -)new操作符调用时1.调用opetator new分配内存
    2.调用构造函数delete操作符调用时1.调用西狗函数
    2.调用operator delete回收内存malloc可认为相当于opetator new
    free可认为相当于operator delete
      

  6.   


    是问,为什么new的要delete吗?
    当然要了,不然内存会吃完啦,,
      

  7.   

    一定要显示调用析构函数,我的重点是问这个,。那个new的要delete谁都知的,谢谢大家了
      

  8.   

    谁说要显式调用析构函数?不光不需要,而且不能,new出来的东西需要delete来间接调用析构函数,因为delete除了调用析构函数还要干别的事。只有一种情况new出来的东西不能调用delete,只能调用析构函数,如下面的调用:
    BYTE buf[256];
    CSomeClass* pClass = ::new(buf) CSomeClass();pClass 在使用完成后不能调用delete,当然是否需要调用析构函数完全看你的需求,如果需要就必须显式调用 pClass->~CSomeClass();不过我实在不知道楼主问的是什么问题。
      

  9.   


    一定要显式调用析构函数很无语啊!我就从没直接调用过析构函数,倒是 delete 用的不少.析构函数是系统在回收变量内存时自动调用的.我就不明白为什么要显示调用