我有一个静态库,其中包含了我的大部分代码/对象。我有另一个继承这些对象的库:例如。
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->nBlockUse))
这只是最近才出现的,很难诊断,因为在我对其中一些类做了一些更改之前,它一直很好用。
我现在删除子类对象(它继承基类对象),然后将基类对象设置为NULL,这似乎是有效的。
问题是为什么会发生这种情况?
发布于 2013-07-28 13:32:13
继承时在基类中有一个虚拟析构函数是很重要的。
在程序后面调用delete时,如果没有虚拟析构函数,编译器将生成调用属于当前变量类型的析构函数的代码。
因此,如果您持有基类类型的指针,则将使用基类析构函数。
如果您持有指向派生类类型的指针,则将使用派生类析构函数。
这可能会引起各种问题,最常见的情况是,您可以通过看到很难找到的内存泄漏来发现它。
https://stackoverflow.com/questions/17908638
复制相似问题