我有一个项目,严格控制什么和如何分配内存。我有一个可以分配在堆上的事物的基类,对于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
s返回指针,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
?
它应该是你所定义的http://en.cppreference.com/w/cpp/memory/new/operator_delete – StoryTeller
我还必须指出,我不能重现你的错误http://rextester.com/OHB53375 – StoryTeller
如果我尝试放置一个对象,它对我很有用,它只是导致警告的派生类。尽管警告的确引用了Object的操作符。 – lcsondes