静态库中的动态内存

时间:2013-07-28 13:19:25

标签: c++

我有一个静态库,其中包含我的大部分代码/对象。我有另一个库继承了其中一些对象:E.G。

class SomeClass <-- from base library

class AnotherSomeClass : public SomeClass <--another library

在SomeClass中,我有另一个对象SomeObject,它也以相同的方式继承。

SomeObject *newobject = new AnotherSomeObject(); //for example SomeObject exists in one of the base classes in another library.

然后我向上播放以访问仅存在于子类中的函数,如下所示:

AnotherSomeObject *object = (AnotherSomeObject*)newobject;

一切都运行良好,除非我释放内存,这是在基类中完成的。我得到了:_ASSERTE(_BLOCK_TYPE_IS_VALID(pHead-&gt; nBlockUse))

这只出现在最近才难以诊断,因为它在我对某些类进行了一些更改之前一直正常工作。

我现在删除子类对象(继承基类对象),然后将基类对象设置为NULL,这似乎正常。

问题是为什么会发生这种情况?

1 个答案:

答案 0 :(得分:1)

继承时在基类中有一个虚拟析构函数很重要。

如果稍后在程序中调用delete,如果没有虚析构函数,编译器将生成调用析构函数的代码,该析构函数属于当前变量所属的类型。

因此,如果您持有基类类型的指针,则将使用基类析构函数 如果您持有指向派生类类型的指针,则将使用派生类析构函数。

这可能会导致各种问题,最常见的是你可以通过看到非常难以找到的内存泄漏来发现它。