如何在C ++中删除变量

时间:2017-01-11 18:22:16

标签: c++ visual-studio visual-c++ types

我想在我的程序中释放ram。

即使我是新手,我也非常关心表现。

string i_want_to_delete_this = "I don't want this cleared, but            
completely gone";
/* I figured out */ i_want_to_delete_this.clear() /* simply sets the
string value to "". I want to be able to do this with every
datatype! I want it completely gone, not even declared anymore. */

3 个答案:

答案 0 :(得分:7)

我不明白你为什么要这样做,并且在任何情况下都不能删除或以其他方式删除命名变量,除非它们在超出范围时被编译器概念性地删除了,并且实际上当包含它们的函数退出时删除。例如:

<item name="android:windowTranslucentStatus">true</item>

答案 1 :(得分:4)

有3种变量。根据您管理内存的种类不同。

全局变量

这些属于您程序的特殊部分。它们在程序启动时出现,在程序结束时消失。你无法做任何事情来回收全局变量占用的内存。 一些更复杂的常量也可能属于该类别。您的字符串文字"I don't want this cleared, but completely gone"很可能会驻留在那里,无论您是否将其复制到i_want_to_delete_this变量。

堆叠变量

局部变量和函数参数。它们出现在您的代码中。输入该变量的范围时会分配内存,并在离开范围时自动删除:

{ //beginning of the scope
    int foo = 42; // sizeof(int) bytes allocated for foo
    ...
} //end of the scope. sizeof(int) bytes relaimed and may be used for other local variables

请注意,当启用优化时,可能会将局部变量提升为寄存器,并且根本不会占用RAM内存。

堆变量

堆是你自己管理的唯一一种记忆。在普通的C中,您使用malloc在堆上分配内存,并将其与free一起释放,例如

int* foo = (int*)malloc(sizeof(int)); //allocate sizeof(int) bytes on the heap
...
free(foo); //reclaim the memory

请注意,foo本身是一个局部变量,但指向堆内存的一部分,您可以在其中存储整数。

同样认为C ++看起来像:

int* foo = new (int; //allocate sizeof(int) bytes on the heap
...
delete foo; //reclaim the memory

当变量必须存在的时间比范围长得多时,通常会使用堆,通常取决于一些更复杂的程序逻辑。

答案 2 :(得分:0)

当执行离开函数或子语句时,将删除自动变量,即未使用mallocnew运算符的变量。

在函数外部声明的变量将保留在内存中,直到程序终止。

另外,我会关注程序的正确性和稳健性。如果程序不适合您的平台内存,则只担心RAM或内存使用情况。

在现实世界中,工作场所,由程序处理并且不适合存储器的大多数数据可以分成多个部分,每个部分单独处理(尽管有一些例外)。