C++有没有什么办法可以统计代码里所有类的分配和释放次数,以方便定位内存泻漏问题?

黎小鱼


C++动态分配的内存都需要释放,否则就会出现内存泄漏。过去都是new/delete成对使用,一不小心就可能漏掉几个,然后查代码很久才能发现,有的甚至一直被隐藏。

C++11标准有几类智能指针可以使用,不用主动delete释放,它在其生命周期完结时自动帮你释放。

C++里面的四个智能指针: auto_ptr, unique_ptr,shared_ptr, weak_ptr 其中后三个是C++11支持,并且第一个已经被C++11弃用。

unique_ptr<string> p(new string ("auto"));/<string>

指针p在其有效范围外就自动释放了,如果想要观察释放效果,可以将上面的string类改为你的自定义类,并将在其析构函数内打印一条消息显示调用了析构函数, 你就可以确定它在什么时候释放的了。

其它几类智能指针类似。


码中寻乐


其实从VS2017以来,调试程序退出时,都会直接打印出内存泄露信息。

其中有分配序号,和分配大小等信息,通过分配序号,可以在下次运行时设置断点。

这个信息已经足够中小项目调试了。如果是像chrome那种项目,那就确保每个小模块没有内存泄露,然后再确保合成项目。


三袋大菠萝


重载new/delete。


皮拉夫大王编程


继承一个公共基类计数


whq7992


可以的,重载new,每次调用的时候进行日志记录就可以了。这是很常见的解决方案


分享到:


相關文章: