gpt4 book ai didi

c++ - 在 C++ 中进行内存清理以避免数据泄漏的更好方法?

转载 作者:搜寻专家 更新时间:2023-10-31 01:42:46 25 4
gpt4 key购买 nike

在“C”中工作时,我正在使用清理技术来避免数据泄漏,正如 CERT 所指导的那样:

memset(mem_name, '\0', mem_size);
免费(内存名称);

  1. delete() 是否自动执行,在 C++ 中?
  2. 如果没有,使用 delete()C++ 中执行此操作的更好方法是什么?

最佳答案

  1. delete() 是否自动执行,在 C++ 中?

没有

  1. 如果没有,使用 delete() 在 C++ 中执行此操作的更好方法是什么?

通常这在 C++ 中是错误的:

Foo* p = new Foo();
memset(p, 0, sizeof(Foo));
delete p;

问题是 delete p 将调用类的析构函数,如果该析构函数是非平凡的,它可能需要访问类的成员以释放相关资源,但这些成员有被 memset 覆盖。

等同于显式调用析构函数,调用 memset,然后使用 operator delete 释放内存:

Foo* p = new Foo();
p->~Foo();
memset(p, 0, sizeof(Foo));
::operator delete(p);

但是如果编译器发现没有人再次访问内存,则允许编译器优化内存集,因此 CERT 建议不是很好。

关于c++ - 在 C++ 中进行内存清理以避免数据泄漏的更好方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26297078/

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