我有一个项目,严格控制分配内存的内容和方式。我有一个可以在堆上分配的东西的基类,operator new
和operator 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
的正确形式是什么?
答案 0 :(得分:0)
似乎我需要在每个派生类中声明operator delete
以消除警告。