静态成员展示位置删除签名?

时间:2017-05-09 09:57:58

标签: c++

我有一个项目,严格控制分配内存的内容和方式。我有一个可以在堆上分配的东西的基类,operator newoperator delete的静态重载及其数组变体。这些工作完全没有任何警告。

对于只允许放置新内容的所有内容,都有一个终极基类:

class Object
{
public:
    static void* operator new(size_t, void*);
    static void* operator new[](size_t, void*);
    static void operator delete(void*, void*);
    static void operator delete[](void*, void*);
};

这些实现很简单,并且在相应的.cpp文件中。 operator new返回指针,operator delete s什么都不做。

当我在VS2015下编译时,使用new (ptr) DerivedFromObject()生成以下警告。异常处理设置为/EHa

warning C4291: 'void *Object::operator new(std::size_t,void *)': no matching operator delete found; memory will not be freed if initialization throws an exception

我尝试过使用签名:添加noexcept,将size_t添加到operator delete但似乎没有任何效果。静态成员展示位置operator delete的正确形式是什么?

1 个答案:

答案 0 :(得分:0)

似乎我需要在每个派生类中声明operator delete以消除警告。