跨静态库的动态内存
dynamic memory across static libraries
我有一个静态库,它包含了我的大部分代码/对象。我有另一个库,它继承了其中一些对象: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->nBlockUse))
这是最近才出现的,很难诊断,因为在我对一些类进行一些更改之前,它一直运行良好。
我现在删除子类对象(它继承了基类对象),然后将基类对象设置为NULL,这似乎是有效的。
问题是为什么会发生这种情况?
继承时在基类中有一个虚拟析构函数很重要。
当您稍后在程序中调用delete时,如果您没有虚拟析构函数,编译器将生成调用析构函数的代码,该析构函数属于当前变量所属的类型。
因此,如果您持有基类类型的指针,则将使用基类析构函数
如果您持有指向派生类类型的指针,则将使用派生类析构函数。
这可能会导致各种各样的问题,最常见的情况是,你可以通过看到很难找到的内存泄漏来发现它。
相关文章:
- 在以唯一ptr为值的C++映射中,动态内存何时会被销毁
- 开放 CV 中的动态内存分配,用于视频处理
- 为什么类和 main() 函数中也有动态内存分配
- 在没有动态内存的世界中,我是否需要虚拟析构函数?
- c++ 动态内存 堆栈中的分配
- 给定特定内存地址的数组的动态内存分配
- 释放动态内存时C++错误
- 我刚刚了解了C++中的动态内存分配
- 无法删除布尔动态内存分配
- 有没有办法找到动态内存大小,比如大小?
- 我在 2D 数组的动态内存分配中遇到了一些奇怪的代码C++? 请解释一下这是什么?
- 具有对齐存储的动态内存分配
- 指向数组unique_ptr在调用 release() 后会自动释放动态内存,这是真的吗?
- 在cpp中使用boost-python的python代码是否进行动态内存分配
- 我应该在这个程序中使用静态内存分配还是动态内存分配
- C++ 模板函数中的动态内存分配
- 指向动态内存中结构中的变量时出现问题
- C++具有动态内存分配的 constexpr 函数
- 动态内存分配错误
- 按引用传递和动态内存分配之间的区别是什么