我对智能指针和内存分配感到困惑。
在我的智能指针类中,我通过引擎中的内存模块拥有自己的分配内存方式。
template <class T>
class Object
{
public:
inline Object()
{
Init();
if (mEngine)
{
mObj = (T*) mEngine->GetMemoryManager()->Allocate(sizeof(T));
mRefCount = 1;
}
}
现在,当我想要Destroy()
我的引擎时,我希望所有内存都可以释放。这首先是因为我想清理与我的引擎相关的所有内存,并且因为mObj
的清理依赖于我的内存管理器,因为它可能使用例如内存池来分配/释放内存,并删除内存管理器会导致无法分配的内存。
所以我用聪明的指针射击自己的脚吗?有没有一种聪明的方法可以解决这个问题?
答案 0 :(得分:6)
为什么这样?事实上,将智能指针与自定义内存管理混合是一种常见做法。 std::shared_ptr
(或boost::shared_ptr
)支持自定义删除器,引用计数指针通常有一些虚拟方法被调用以释放它们等。
......让力量与你同在!