【问题标题】:Deleting variables that are no longer in use, through the function [duplicate]通过函数删除不再使用的变量[重复]
【发布时间】:2015-01-26 15:35:18
【问题描述】:

我知道 C++ 在内部拥有很多给定点的内存管理,并且我知道删除动态分配的数据的删除命令,而这个问题似乎毫无意义,因为它可能永远不会成为一个由于破坏了正在使用它们的函数范围之外的变量,但是否可以使用诸如 delete 之类的函数来删除用户不再使用的变量。 就像说你在一个内存严重耗尽的硬件上,并且需要确保即使是一个整数通常占用的 4 个字节那么小的东西也会被直接返回。是否可以在不将变量包装在某个函数中以使汇编程序知道立即将其删除的情况下执行此操作? 从某种意义上说,由于内存的扩展以及这些天可以操纵它的方式,我认为这永远不会发生,但它似乎以前可能是一个问题,如果我没记错。

总结: 有没有办法直接管理非动态数据,分配到栈中,通过函数调用从栈中取出,还是完全由程序内部指令运行?

例子:

void foo(){

  short int operator;
  /*Did what needed to be done with the operator variable***********/
  //Pseudo-code

   delete operator;

  /*Even though it was not allocated dynamically,
    and with the use of another function call*/
}

【问题讨论】:

  • 除了您的示例既不是有效的 C 也不是 C++ 的事实之外,编译器会为您处理堆栈。尽管如此,还是有 alloca(在块退出时释放)和 C 有可变长度数组(永远不要与 alloca 混合)让事情变得更有趣。
  • 我知道该语法对于 C 或 C++ 都不可行,我将它本身作为一个有点伪代码的示例。谢谢你的 alloca 功能。将阅读它。
  • 当某些东西超出范围时,它会自动清理。将您的“堆栈分配”变量放在代码块中,它将在块的末尾蒸发。使用delete 运算符删除局部变量是没有意义的。

标签: c++ c variables


【解决方案1】:

正如您所说,简单的方法就是将变量放在较低范围内并允许它自行释放。

如果是任何容器,你可以通过适当的函数调用来清除它。

基本上:

删除新的删除[]新的[]

另见: https://stackoverflow.com/a/441837/2975193

【讨论】:

  • 刚刚注意到将它放在它自己的范围内的可能性,并声明它之外的所有其他内容。这本身就让我逃脱了。我倾向于认为过于复杂的简单点太多。一定要记得多遵循 KISS 原则。
猜你喜欢
  • 1970-01-01
  • 2014-02-01
  • 1970-01-01
  • 2012-04-15
  • 2018-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-29
相关资源
最近更新 更多