我花了一些时间编写应用程序进行练习,并且我喜欢在整个过程中使用智能指针,以避免在我忘记删除某些内容时发生内存泄漏。同时,我也喜欢使用异常来报告构造函数中的失败并尝试处理它。但是,当它不能时,我希望它通过调用 assert() 或 exit() 退出该位置的程序。但是,使用 msvc 中的 crtdbg 库时,它会报告来自智能指针的内存泄漏,该智能指针具有动态分配给它们的任何内容。这对我来说意味着两件事之一。1) 智能指针永远不会超出分配它们的范围,也永远不会释放,从而导致一些内存泄漏,或者 2) crtdbg 没有捕获释放,因为它没有在 main 处退出。页面虽然,使用 _CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF ); 在程序开始时将捕获来自任何出口点的泄漏,我仍然使用它得到内存泄漏错误。
所以我向你们提出的问题是,内存实际上会在退出或断言时被释放吗?如果没有,我是否可以从 std::shared_ptr 派生并实现我自己的解决方案来编目动态分配的对象,以便在调用之前释放退出或断言,还是对于更简单的解决方案来说工作量太大?