gpt4 book ai didi

c++ - C++ 中的析构函数

转载 作者:IT老高 更新时间:2023-10-28 23:09:24 26 4
gpt4 key购买 nike

析构函数是释放分配给它所属的对象的内存,还是只是调用它以便在编译器释放对象之前执行最后一分钟的内务处理?

最佳答案

“编译器”不会删除任何内容。它创建在运行时执行操作的代码。

当你编写 delete somePointer; 时,编译器本质上会这样写:

  if ( has_virtual_destructor( * somePointer  ) ) {
// virtual dispatch to a compiler-generated function
dynamic_cast< true_dynamic_type * >(somePointer)->destroy_dynamic_type();
/* contents of true_dynamic_type::destroy_dynamic_type() {
this->~true_dynamic_type();
operator delete( this); // executed within class context
} */
} else {
somePointer->~ClassName();
operator delete(somePointer);
}

换句话说,析构函数被调用,然后操作符 delete 被调用以释放存储空间。

如果析构函数是虚拟的,则使用虚拟调度以最派生形式对对象执行整个操作。实现这一点的常用方法是向每个虚拟析构函数添加隐藏参数。

请注意,顶级 if 语句实际上并不是生成代码的一部分;编译器在编译时做出决定。

关于c++ - C++ 中的析构函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2502052/

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