简体   繁体   English

删除vs运算符删除(和void指针)

[英]Delete vs operator delete (and void pointer)

Does delete ptr differ from operator delete(ptr) only in this, that delete calls ptr destructor? delete ptr是否与operator delete(ptr)不同,那个delete调用ptr析构函数? Or in other words, does delete ptr first call a destructor of ptr and then operator delete(ptr) to free allocated memory? 或者换句话说,不delete ptr首先调用析构函数ptr ,然后operator delete(ptr)以释放分配的内存? Then is delete ptr technically equivalent to the following: 然后delete ptr技术上等同于以下内容:

T * ptr = new T;

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

?

delete ptr will do overload resolution for operator delete , so it may not call the global ::operator delete delete ptr将为operator delete执行重载解析,因此它可能不会调用global ::operator delete

But otherwise, yes. 但是,不然,是的。 The delete operator calls the relevant destructor, if any, and then calls operator delete . delete运算符调用相关的析构函数(如果有),然后调用operator delete

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM