gpt4 book ai didi

c++ - 如何调用自定义删除操作符

转载 作者:搜寻专家 更新时间:2023-10-31 00:53:43 25 4
gpt4 key购买 nike

我有一个自定义的 delete[] 运算符:

void operator delete[](void *ptr, char const* file, int line) noexcept {...}

当我尝试调用它时,它会调用简单的 delete[](void *ptr) 而不是我的自定义运算符:

char *b = new char[256];
delete[] b, __FILE__, __LINE__;

它可以编译,但我对自定义运算符的调用是否正确?

最佳答案

当使用 delete 表达式时,默认的 operator delete(void*) 被调用。数组用途类似。语言调用重载的 operator delete() 的唯一情况是在调用匹配的 operator new() 之后对象的构造函数抛出异常.

如果您使用自定义 operator new(),即使用一些放置语法,例如 new(a, b) T(...),您将需要手动销毁对象并释放相应的内存:

T* ptr = new(__FILE__, __LINE__) T(args);
// ...
ptr->~T(); // destroy the object
operator delete(ptr, __FILE__, __LINE__);

当替换或重载“普通”operator new()/operator delete() 时,即签名

void* operator new(std::size_t)
void operator delete(void*)

(和相应的数组形式),通过替换全局版本或使用特定于类的重载,即相应的 static 成员、析构函数和 operator delete()delete 表达式调用。

关于c++ - 如何调用自定义删除操作符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47848579/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com