代码之家  ›  专栏  ›  技术社区  ›  Ariel

从未调用析构函数

c++
  •  3
  • Ariel  · 技术社区  · 16 年前

    对不起,我的疏忽,简而言之 ~CSArray() 是工作的,但是类的接口和实现存在于不同的文件中,所以这里有错误

    3 回复  |  直到 16 年前
        1
  •  4
  •   ereOn    16 年前

    确保您声明了析构函数 virtual 在基类中。

        2
  •  2
  •   Markus Kull    16 年前

    显示的代码当前太短,看不到问题。

    一些好建议:永远不要建立自己的参考计数方案。使用经过验证的库实现,如std::auto_ptr、boost::shared_ptr或boost::shared_array,并利用raii( http://en.wikipedia.org/wiki/RAII ) 另外,避免像瘟疫一样“删除这个”。在某些情况下,它似乎可以工作,但一般来说,前置/后置条件太多了。

        3
  •  2
  •   KedarX    16 年前

    假设 _retainCount = 0

    如果你已经声明了你的析构函数,它就会工作。 virtual 在基类中。

    见以下代码:(GCC版本3.4.3)

    #include<iostream>
    using namespace std;
    
    class A
    {
        public:
            A(){cout<<"A ctor"<<endl;};
            virtual ~A(){cout<<"A dtor"<<endl;};
            void testDel()
            {
                delete this;
            }
    };
    
    class B: public A
    {
        public:
            B(){cout<<"B ctor"<<endl;};
            ~B(){cout<<"B dtor"<<endl;};
    };
    
    int main()
    {
        B bObj;
    
        bObj.testDel(); 
       return 0; 
    }
    

    结果:没有显式删除

    A ctor
    B ctor
    B dtor
    A dtor
    

    结果:显式删除

    A ctor
    B ctor
    B dtor
    A dtor
    B dtor
    A dtor