【发布时间】:2016-12-31 13:59:49
【问题描述】:
我的 C++ 代码中的一些函数具有使用大量堆内存的临时本地对象。所以我希望它们在我处理完它们后立即被破坏并释放它们的记忆。但是 C++ 只有在变量名超出范围时才调用析构函数。有没有办法让编译器在变量的活动范围结束时自动调用析构函数或其他清理方法?
当然,我可以手动新建/删除对象,但这很不方便并且容易出错。同样令人不满意的是使用额外的大括号来明确限制范围。
编辑:从响应来看,当前的 C++ 功能似乎无法做到这一点。我会为下一个标准推荐它。
【问题讨论】:
-
听起来你的函数太长了。
-
“同样不令人满意的是使用额外的大括号来明确限制范围”。学会爱上这种技术。
-
我也不明白使用 new/delete 与使用额外大括号的最后一部分。那不是替代方案,因为要么对象是在堆上分配的,那么您必须使用 new/delete 并且添加大括号根本无济于事。或者它在堆栈上然后它是相反的方式......
-
@fgrdn RAII 无济于事,而且“全局管理器,它将清理长时间不使用的对象”通常听起来是个非常糟糕的主意。
-
析构函数已经尽可能地“渴望”了。听起来你只是在编写糟糕的代码。为什么不在 Code Review 上发布呢?
标签: c++ optimization scope destructor