【发布时间】:2014-10-25 18:59:42
【问题描述】:
对于我用 C++ 编写的内存管理器作为概念证明,为了跟踪分配的对象,我在函数中使用 malloc() 分配内存,然后返回指向该内存的指针并使用放置新运营商。然后,为了跟踪对象何时被删除,我将指针传递给另一个函数以在指针上调用free()。
但是,由于我使用free() 而不是delete,对象的构造函数不会像通常那样自动调用,所以我必须自己调用它。此外,由于内存管理器设计用于处理任何对象,因此可以想象(甚至可能)在其生命周期的某个时刻,它必须释放一个可能具有多个父类或位于继承树深处的对象。
我最初的解决方案是调用基础对象析构函数,这将调用所有子析构函数(如果相信this question),但因为对象实际上可以是任何东西并且具有任何继承集,没有办法知道它的真正基类是什么。
所以我的问题是:显式调用子类析构函数是否也会自动调用所有基本析构函数,例如删除,还是没有办法轻松做到这一点?
【问题讨论】:
-
与手动调用构造函数相比,自动调用析构函数的行为没有区别(至少,我不知道)。不过,证明(使用标准语言)可能会很棘手。
-
你可以很容易地写一些代码来找出答案。
-
@PaulRooney 那不给你任何保证。
标签: c++ memory memory-management