我可以使用块来管理C++中的变量范围吗?

tun*_*nuz 5 c++ object scoping

我试图在C++程序中节省一些内存,我想知道我是否可以使用块作为变量的范围(如Perl).假设我有一个巨大的对象执行一些计算并给出结果,这样做是否有意义:

InputType  input;
ResultType result;

{
    // Block of code
    MyHugeObject mho;
    result = mho.superHeavyProcessing();
}

/*
   My other code ...
*/
Run Code Online (Sandbox Code Playgroud)

退出块时,我可以期望对象被销毁吗?

Meh*_*ari 25

是的你可以.

一旦变量超出范围,就会调用析构函数,它应该释放堆分配的内存.


Ric*_*ick 18

是绝对的,除了节省内存之外,通常在调用析构函数时希望析构函数实际执行某些操作时调用析构函数的析构函数(请参阅RAII).例如,创建基于作用域的锁并以异常安全的方式轻松释放它,或者确定性地放弃对共享或宝贵资源(如文件句柄/数据库连接)的访问.

-Rick