c++ - 删除与运算符删除(和空指针)

标签 c++ destructor void-pointers delete-operator

delete ptroperator delete(ptr) 的区别仅在于 delete 调用 ptr 析构函数?或者换句话说,delete ptr 是否首先调用 ptr 的析构函数,然后调用 operator delete(ptr) 来释放分配的内存?那么 delete ptr 在技术上等同于以下内容:

T * ptr = new T;

//delete ptr equivalent:
ptr->~T();
::operator delete(static_cast<void *>(ptr));

?

最佳答案

delete ptr会对operator delete做重载解析,所以它可能不会调用全局::operator delete

但除此之外,是的。 delete 运算符调用相关的析构函数(如果有),然后调用 operator delete

关于c++ - 删除与运算符删除(和空指针),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10573678/

相关文章:

android - Gradle + Cmake 在连接路径时添加意外的引号

c++ - 使用结构中的 ncurses 扩展字符

c++ - 为什么即使删除了析构函数,我仍然可以创建匿名 union ?

c - 转换为 long double 的 Void 指针会产生垃圾

c++ - 如何在函数中创建局部变量?

c++ - 为什么这段代码在没有 vector 头文件的情况下运行?

C++ 为什么在传递类指针时调用析构函数?

c++ - 自毁:this->MyClass::~MyClass() vs. this->~MyClass()

c - 在 C 中为非空 void* 指针赋值的正确方法应该是什么?

c - Void * 转换为 int/char 并替换结果时出现问题