【原创】注意析构函数的使用

清单:虚析构函数使用

 1 class X { 
 2  public: 
 3   virtual ~X()= default; // 编译器自动生成 defaulted 函数定义体
 4  private: 
 5   int x; 
 6  }; 
 7  class Y: public X { 
 8  private: 
 9   int y; 
10  }; 
11  int main(){ 
12   X* x = new Y; 
13   delete x;
清单中x为X指针,x指向的是Y对象(Y继承X),所以x基类指针只是指向Y对象的基类部分。如果X的析构函数不是虚函数,delete x时只是调用了X的析构函数,释放了Y的基类子对象,从而造成内存泄漏。所以需要将X的析构函数定义为虚函数,利用多态性。同时为了利用编译器生成的合成析构函数的效率,可以在后面加上=default。
posted @ 2015-11-04 10:21  cposture  阅读(946)  评论(1编辑  收藏  举报
levels of contents