首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >跨静态库的动态内存

跨静态库的动态内存
EN

Stack Overflow用户
提问于 2013-07-28 13:19:24
回答 1查看 196关注 0票数 0

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

代码语言:javascript
运行
复制
class SomeClass <-- from base library

class AnotherSomeClass : public SomeClass <--another library

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

代码语言:javascript
运行
复制
SomeObject *newobject = new AnotherSomeObject(); //for example SomeObject exists in one of the base classes in another library.

然后,我向上转换来访问只存在于子类中的函数,如下所示:

代码语言:javascript
运行
复制
AnotherSomeObject *object = (AnotherSomeObject*)newobject;

所有操作都很好,除非我释放内存,这在基类中完成。我得到了:_ASSERTE(_BLOCK_TYPE_IS_VALID(pHead->nBlockUse))

这只是最近才出现的,很难诊断,因为在我对其中一些类做了一些更改之前,它一直很好用。

我现在删除子类对象(它继承基类对象),然后将基类对象设置为NULL,这似乎是有效的。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-28 13:32:13

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

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

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

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

这可能会引起各种问题,最常见的情况是,您可以通过看到很难找到的内存泄漏来发现它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17908638

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档