Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用重载放置新建/删除来增强共享\u ptr_C++_Memory Management_Shared Ptr_Placement New - Fatal编程技术网

C++ 使用重载放置新建/删除来增强共享\u ptr

C++ 使用重载放置新建/删除来增强共享\u ptr,c++,memory-management,shared-ptr,placement-new,C++,Memory Management,Shared Ptr,Placement New,我将boost shared_ptr与我自己的内存管理器一起使用,如下所示(简化示例,我希望其中没有错误): 我是这样使用它的: shared_ptr<Object>(new(globalMM) Object, Deleter); shared_ptr(新的(globalMM)对象,Deleter); 但现在我意识到了。如果共享的_ptr删除了我的onject,它将调用Deleter::operator()并删除这些对象。但是析构函数没有被调用 如何更改此设置?您可以显式调用析构

我将boost shared_ptr与我自己的内存管理器一起使用,如下所示(简化示例,我希望其中没有错误):

我是这样使用它的:

shared_ptr<Object>(new(globalMM) Object, Deleter);
shared_ptr(新的(globalMM)对象,Deleter);
但现在我意识到了。如果共享的_ptr删除了我的onject,它将调用Deleter::operator()并删除这些对象。但是析构函数没有被调用


如何更改此设置?

您可以显式调用析构函数(这意味着
删除程序
可能会收到
T*
而不是
void*
)。请注意,您提供的代码实际上没有使用placement new/delete,因此我的回答仅对这个特定示例有意义。

因为删除程序应该销毁对象:

class Deleter
{
public:
   void operator()(Object *p) {
    p->~Object();
    globalMM.deallocate(p); 
   }
};
编辑:我的删除错误,已修复

class Deleter
{
public:
   void operator()(Object *p) {
    p->~Object();
    globalMM.deallocate(p); 
   }
};