静态成员放置删除签名
Static member placement delete signature?
我有一个项目,严格控制分配内存的内容和方式。我有一个基类,用于可以在堆上分配的东西,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
什么都不做。
当我在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
的正确形式是什么?
似乎我需要在每个派生类中声明operator delete
s以摆脱警告。
相关文章:
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 如何在C++中使用非静态成员函数作为回调函数
- (C++)为什么静态成员可以在初始化之前使用
- 类的全局对象和静态成员
- 在作为静态成员包含在另一个类中的类的构造函数中使用 cout
- 模板化类中静态成员的延迟初始化
- 如何在C++中删除静态数组?
- 使用静态成员声明类时遇到问题
- C++:是否可以使用非静态成员变量模板?
- 静态成员函数使用相同的名称时出现模板类型名称错误
- 如何在复杂继承中访问静态成员变量
- 在 nullptr 上调用无状态类的非静态成员函数是否合法?
- 如何在友元函数中使用静态成员而不添加前缀 [类名]::
- C++构造函数和静态成员
- 指向重载静态成员的函数指针 - 在unique_ptr中用作自定义删除器
- 静态成员放置删除签名
- 模板类自动注册,vs 2017编译器删除静态成员
- 如何将非静态成员函数作为unique_ptr删除器传递
- 删除未使用的模板实例化的静态成员
- C++11非静态成员初始值设定项和已删除的复制构造函数