Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在执行超出堆栈对象的范围之前取消分配堆栈对象? 在C++中,RAII是否意味着只有当执行超出堆栈对象的范围时,堆栈对象(在堆栈上分配的对象,例如函数中的局部变量)才会被释放?_C++_Stack_Raii - Fatal编程技术网

在执行超出堆栈对象的范围之前取消分配堆栈对象? 在C++中,RAII是否意味着只有当执行超出堆栈对象的范围时,堆栈对象(在堆栈上分配的对象,例如函数中的局部变量)才会被释放?

在执行超出堆栈对象的范围之前取消分配堆栈对象? 在C++中,RAII是否意味着只有当执行超出堆栈对象的范围时,堆栈对象(在堆栈上分配的对象,例如函数中的局部变量)才会被释放?,c++,stack,raii,C++,Stack,Raii,如果我想在执行到达堆栈对象作用域的末尾之前稍微释放堆栈对象,该怎么办 谢谢。听起来你想要std::可选的。它允许自动资源管理,但也允许“解除分配”状态。如果不离开作用域,则无法解除分配堆栈内存。也许你的意思是“销毁仍在堆栈上的对象”?在函数中创建一个较小的作用域并在其中声明堆栈对象不会解决这个问题吗?@Tim不。你不能泄漏堆栈内存。。。这在概念上是不可能的。你不可能用任何合理的方式做到这一点。但你为什么要这么做@Tim No.析构函数不会释放对象所在的内存。其次,如果显式销毁堆栈上的对象,则在离

如果我想在执行到达堆栈对象作用域的末尾之前稍微释放堆栈对象,该怎么办


谢谢。

听起来你想要
std::可选的
。它允许自动资源管理,但也允许“解除分配”状态。

如果不离开作用域,则无法解除分配堆栈内存。也许你的意思是“销毁仍在堆栈上的对象”?在函数中创建一个较小的作用域并在其中声明堆栈对象不会解决这个问题吗?@Tim不。你不能泄漏堆栈内存。。。这在概念上是不可能的。你不可能用任何合理的方式做到这一点。但你为什么要这么做@Tim No.析构函数不会释放对象所在的内存。其次,如果显式销毁堆栈上的对象,则在离开作用域时会再次调用其析构函数,从而导致未定义的行为。