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

Kai*_*aan 1 c++ memory-leaks memory-management smart-pointers reference-counting

关于智能指针和内存分配我处于两难境地.

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

template <class T>
    class Object
    {
    public:
        inline Object()
        {
            Init();

            if (mEngine)
            {
                mObj = (T*) mEngine->GetMemoryManager()->Allocate(sizeof(T));
                mRefCount = 1;
            }
        }
Run Code Online (Sandbox Code Playgroud)

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

那么我是否用聪明的指针射击自己?有没有一种聪明的方法来解决这个问题?

小智 6

为什么这样?事实上,将智能指针与自定义内存管理混合是一种常见做法.std::shared_ptr(或boost::shared_ptr)支持自定义删除器,引用计数指针通常具有一些被调用以释放它们的虚拟方法等.

但是,你不能破坏引擎,而其他东西正在使用它的一部分,比如引用的对象.为此,人们通常也将"引擎"作为引用计数指针.请注意循环依赖.

......让力量与你同在!