Fat*_*sis 1 c++ visual-studio-2010 visual-studio-express
我花了一些时间编写一个练习应用程序,我喜欢使用智能指针,以避免内存泄漏,以防我忘记删除的东西.与此同时,我也喜欢使用异常来报告构造函数中的失败并尝试处理它.但是当它不能时,我希望它通过调用assert()或exit()来退出该位置的程序.但是,在msvc中使用crtdbg库时,它会报告智能指针的内存泄漏,这些指针会动态分配给它们.这对我来说意味着两件事之一.1)智能指针永远不会超出它们分配的范围,并且永远不会释放,导致一些内存泄漏,或者2)crtdbg没有捕获解除分配,因为它不会在main处退出.但是,从这个页面,使用_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); 在程序开始时将从任何退出点捕获泄漏,我仍然使用它来获取内存泄漏错误.
所以我向你们提出的问题是,内存实际上会在退出或断言时被释放,如果没有,我是否可以从std :: shared_ptr派生并实现我自己的解决方案来编目动态分配的对象,以便在调用之前解除分配退出或断言,还是为更简单的解决方案做太多工作?
当程序退出时,操作系统会回收内存,因此如果泄漏令您担心,则不应该.
但是,如果你的析构函数中有逻辑,并且必须销毁对象 - exit显式调用会绕过所有释放.解决此问题的方法是抛出一个异常,您可以调用exit,将其捕获main并返回.
#include "stdlib.h"
void foo()
{
//exit(0);
throw killException();
}
int main
{
try
{
foo();
}
catch (killException& ex)
{
//exit program calling destructors
return EXIT_FAILURE;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
452 次 |
| 最近记录: |