静态成员放置删除签名

Static member placement delete signature?

本文关键字:删除 静态成员      更新时间:2023-10-16

我有一个项目,严格控制分配内存的内容和方式。我有一个基类,用于可以在堆上分配的东西,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什么都不做。

当我在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

我尝试弄乱签名:添加noexceptsize_t添加到operator delete但似乎没有任何效果。静态杆件放置operator delete的正确形式是什么?

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