小编use*_*833的帖子

C++和虚拟析构函数

我正在一个应用程序中编写一个实用程序类,在这个应用程 我没有任何虚函数(使用虚拟dtors的一般准则),所以考虑到我的内存限制,我选择在这个实用程序类中没有虚拟析构函数.

一些程序员后来 - 有人通过派生来增加我的实用程序类.现在,如果在代码中的任何地方,我的新类new'd和删除正确的dtor将不会被调用,因为基类dtor不是虚拟的(参见示例代码).

除了返回并更改基类之外 - 在这种情况下有什么解决方案?

#include <iostream>
using namespace std;

class utility {
  int i, j;

  public:
    utility () { cout << "utility ctor\n";};
   ~utility () { cout << "utility dtor\n";};
    void dosomething () { cout << "haha\n";};
};

class addtoutility: public utility  {
  char *ch;

  public:
   addtoutility () { ch= new char(); cout << "added ctor\n";};
  ~addtoutility () { delete ch; cout << "added dtor\n";};
   void andnowaddsomefunctionality () {};
};

int main () {
  utility *u …
Run Code Online (Sandbox Code Playgroud)

c++ virtual memory-management new-operator

2
推荐指数
1
解决办法
717
查看次数

标签 统计

c++ ×1

memory-management ×1

new-operator ×1

virtual ×1