gpt4 book ai didi

c++ - 类析构函数和指针释放

转载 作者:行者123 更新时间:2023-11-30 03:00:16 29 4
gpt4 key购买 nike

我正在编写一个类 (virtual_flight_runtime_environment),它主要是非静态的,除了一个静态函数用于 Win32 线程使用它作为其函数。该类声明 struct simaircraftdata* aircraftdata(数据结构),并调用“aircraftdata = new aircraftdata;”在构造函数中(公共(public):virtual_flight_runtime_environment())。

我的问题是关于析构函数和内存释放。我是这样写析构函数的:

    ~virtual_flight_runtime_environment(void) {
/*..Other code, i.e. closing win32 handles, etc.*/
delete aircraftdata;
}

现在,该类在另一个函数(.Net 后台工作程序的 DoWork 函数)中声明,如下所示:

    virtual_flight_runtime_environment* this_environment = new virtual_flight_runtime_environment;

就在函数结束之前,我调用了“delete this_environment;”。紧接着,'this_environment' 将超出范围,应该调用析构函数。

这是正确的吗?我确实注意到随着时间的推移内存使用量持续增加,我想知道我是否做错了什么。对指针调用 delete 只是使它成为一个空指针,还是释放它末尾的数据?

如有任何建议,我们将不胜感激

科林·比登卡普

最佳答案

程序中的删除与它是否会在任务管理器中直接可见之间没有直接联系,因为操作系统会尝试优化内存利用率。当您查看任务管理器时,您通常会看到应用程序的工作集大小,这是衡量您的应用程序请求了多少内存但不一定是当前使用的内存量的度量。

对于您的问题,是的,就像您所做的那样删除内存是 WTG,尽管正如其他人所指出的那样,使用智能指针通常可以更好地处理内存以避免以后的麻烦。

关于c++ - 类析构函数和指针释放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12263923/

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