删除 x 与 ::运算符删除 (x)
delete x vs ::operator delete(x)
delete x;
和::operator delete(x);
有什么区别?我知道它们是不同的,但我无法弄清楚有什么区别。我的具体用例是,我有一个对象,必须使用::operator new(size_t)
分配,然后使用 place new 运算符进行初始化。但是,我真的很希望能够用delete x;
而不是::operator delete(x);
来释放它,所以我想知道这两种方法(没有双关语(何时可能会做不同的事情,所以我可以判断何时(如果有的话(可以安全地互换使用它们。
delete x
是一个delete expression
。
::operator delete(x)
是一个deallocation function
.
删除表达式将调用析构函数(如果存在(,然后调用释放函数。直接调用释放函数将绕过析构函数。
唯一的区别是::operator delete()
不会像delete
那样调用析构函数。
相关文章:
- 为什么 std::make_shared 无法编译带有已删除运算符 new 的类型?
- 无效删除运算符语法
- C++:如果我重载新运算符,我是否也必须重载删除运算符?
- C++自定义删除运算符不能正常工作?
- 为什么我们甚至需要删除运算符?(我们不能只使用删除[]吗)
- 除了调用全局删除运算符之外,删除一个void指针还能做什么呢
- 在这里使用删除运算符是否正确,我很困惑
- 删除运算符
- 使用空实现重写删除运算符
- C ++(为什么)确实移动构造函数删除运算符=
- 如何在 C++ 中使用删除运算符删除单个数据
- 如何通过带有指向基类的指针的删除运算符释放内存
- 删除运算符如何在我的代码中工作
- C++ - 定义自定义新建和删除运算符时make_shared
- 将删除运算符放置在何处以进行动态变量
- C++删除运算符而不"new"
- 如何使用删除 [] 运算符清除动态分配的内存?(无法使用常规删除语法清除)
- 为什么删除运算符在const上下文中使用
- c++是否需要在用户定义和类特定的删除运算符中处理nullptr
- C++ 在覆盖新运算符和删除运算符时不释放数据