【问题标题】:C++ -- Smart pointer and custom memory allocation dilemmaC++——智能指针和自定义内存分配困境
【发布时间】:2012-03-23 09:13:11
【问题描述】:

我在智能指针和内存分配方面遇到了难题。

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

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

            if (mEngine)
            {
                mObj = (T*) mEngine->GetMemoryManager()->Allocate(sizeof(T));
                mRefCount = 1;
            }
        }

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

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

【问题讨论】:

  • 也许一个能够证明问题的独立程序会有所帮助。

标签: c++ memory-management memory-leaks smart-pointers reference-counting


【解决方案1】:

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

但是,当其他东西正在使用它的一部分时,你不能破坏引擎,比如那些引用的对象。为此,人们通常也将“引擎”设为引用计数指针。请注意循环依赖。

...让原力与你同在!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-09
    • 2021-11-29
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 2013-12-25
    • 2018-11-29
    相关资源
    最近更新 更多