C++中的内存净化以避免数据泄漏的更好方法

Better way for memory sanitization in C++ to void data leakage?

本文关键字:数据 泄漏 更好 方法 内存 C++      更新时间:2023-10-16

在"C"中工作时,我在CERT的指导下使用了净化技术来避免数据泄漏,还喜欢:

memset(mem_name, '', mem_size); free(mem_name);

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

  1. 如果没有,在C++中使用delete()有什么更好的方法可以做到这一点

一般来说,这在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的建议不是很好。