C++——智能指针和自定义内存分配困境



我在智能指针和内存分配方面陷入了困境。

在我的智能指针类中,我有自己的方式通过引擎中的内存模块分配内存。

template <class T>
    class Object
    {
    public:
        inline Object()
        {
            Init();
            if (mEngine)
            {
                mObj = (T*) mEngine->GetMemoryManager()->Allocate(sizeof(T));
                mRefCount = 1;
            }
        }

现在,当我想Destroy()我的引擎时,我也希望释放所有内存。这首先是因为我想清理与我的引擎相关的所有内存,也因为mObj的清理依赖于我的内存管理器,因为它可能使用例如内存池来分配/释放内存,而删除该内存管理器将导致不可分配的内存。

那么,我是不是用聪明的指针射中了自己的脚?有没有聪明的方法来解决这个问题?

为什么?事实上,将智能指针与自定义内存管理混合使用是一种常见的做法。std::shared_ptr(或boost::shared_ptr)支持自定义的deleter,引用计数指针通常有一些虚拟方法来释放它们等。

但是,当其他对象正在使用引擎的某些部分(如那些引用的对象)时,您不能破坏引擎。为此,人们通常也将"引擎"作为引用计数指针。只是要小心循环依赖关系。

让力量与你同在!

相关内容

  • 没有找到相关文章

最新更新