我正在使用自定义参数重载 new
和 delete
运算符。虽然 new
有效,但我无法使用自定义参数调用 delete
。我在某处读到,仅当正在创建的对象的构造函数抛出时,才调用重载的 delete
。如果是这种情况,是否没有办法调用我重载的 delete
?
void *operator new(size_t size, unsigned int Tag)
{
//allocate and return.
return nullptr;
}
void operator delete(void *ptr, size_t size, unsigned int Tag)
{
//deallocate
}
int main()
{
int *arr = new(123) int;
delete(123) arr;
}
error: type 'int' argument given to 'delete', expected pointer
最佳答案
您不能使用delete 表达式 显式调用operator delete 重载(即placement delete)。在 placement new 中,您应该将 Tag
保存在某处并在 operator delete 中将其恢复并正确释放内存。
关于c++ - 使用带有自定义参数的重载删除运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57369447/