在C ++中进行内存清理以消除数据泄漏的更好方法?


遇见你
2025-03-19 02:49:33 (4小时前)


在“C”工作时,我正在使用消毒技术来避免

数据
</跨度>
在CERT的指导下泄漏也像:

memset(mem_name,‘\ 0’,mem_size);
自由(mem_name);

delete(),在C ++中自动执行吗?
如果没有,使用delete()在C ++中做什么更好的方法?



2 条回复
  1. 0# 不易青年。 | 2019-08-31 10-32




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

    2. </醇>


      没有




      1. 如果没有,使用delete()在C ++中做什么更好的方法?

      2. </醇>


        一般来说,这在C ++中是错误的:




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

        2. </code>


        问题是

        delete p

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

        memset




        等效的是显式调用析构函数,调用

        memset

        ,然后使用

        operator delete

        释放记忆:




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

        2. </code>




        </强>
        如果可以看到没有人再次访问内存,则允许编译器优化memset,因此CERT建议不是很好。


登录 后才能参与评论