c++ - 使用带有自定义参数的重载删除运算符

标签 c++

我正在使用自定义参数重载 newdelete 运算符。虽然 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/

相关文章:

c++ - 找不到 opencv_highgui230.dll

c++ - 在 C++11 中安全明确地操作原子变量

c++ - 显式 DLL 1 函数失败

c++ - 如何对导出 C++ 类的 DLL 使用延迟加载

c++ - 右值引用上的 std::vector<T>::emplace_back

c++ - std::algorithms 迭代 `std::vector<std::vector<something>>` 的友好方式

c++ - 巴达 C++ std::stringstream

c++ - 每次需要时将整个文件从磁盘复制到内存以处理或读取文件中的数据,直到文件全部读取

c++ - 无法在 VARIANT 结构中获取 BSTR 数据的确切位置

c++ - C++ 如何处理 try catch block 中的赋值?