gpt4 book ai didi

c++ - 删除对象

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:48:34 25 4
gpt4 key购买 nike

首先,当您想释放分配给 C++ 中的对象的内存时,首选哪个?显式调用析构函数或使用删除?

Object* object = new Object(...);
...

delete object;

object->~Object();

其次,删除操作符是否隐式调用了析构函数?

最佳答案

delete 隐式调用析构函数,您不需要(更准确地说:不应该)直接调用它。

析构函数永远不会释放对象占用的内存(它可能驻留在栈上,而不是堆上,对象无从知晓——然而,析构函数将删除对象组件分配的任何内存).

为了释放在堆上分配的对象的内存,您必须调用delete

当您编写自己的类时,C++ 将提供一个默认析构函数 来释放组件对象分配的内存(例如属于您的类的QString ),但是如果您在构造函数中显式分配内存(或其他资源),请务必提供一个析构函数来显式释放这些资源。

关于您自己的类的另一条一般规则:如果您将任何方法标记为virtual,您的析构函数也应该是virtual(即使您依赖默认析构函数) ,以便为从您派生的任何类调用正确的析构函数。

关于c++ - 删除对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2968655/

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