在c ++中,如果我们想破坏内置类型(对于int)以在程序运行时保存内存我们应该怎么做?如果我们这样做:
int h;
int *p=&h;
delete p;
要销毁h,我需要创建一个指向h然后执行删除操作的指针,但指针p仍然消耗相同的内存,似乎我没有做任何事情来保存运行内存,我该怎么办?
答案 0 :(得分:3)
您并没有真正询问如何销毁“内置类型”,而是如何使用自动或静态存储持续时间来销毁对象。而你不能这样做:你的代码的行为是 undefined 。
您只能在拨打delete
后给您回复的指针上调用new
。
因此,您的方法是一种无效的记忆保存技术。
答案 1 :(得分:2)
如在另一个答案中所述,您无法手动销毁内置类型(*)。
但是,您可以缩小定义的范围:
int foo = 3;
...
{
int bar = foo + 2;
...
}
// bar is not defined since it's been "destroyed"
// when going out of scope
在这里创建一个匿名范围。在此范围内,您可以访问变量 在父作用域中定义但是一旦你离开匿名作用域,它中定义的每个变量都会被销毁。
修改强>:
(*)你可以删除一个动态分配的内置类型(int * p = new int(); delete p;
),但你不能销毁它们,因为它们没有析构函数。
答案 2 :(得分:0)
简单的内置类型不需要任何破坏 - 你可以用你喜欢的任何东西覆盖它们的内存。当变量的生命周期结束时,这不会产生任何负面影响。 然而请注意,此类变量(例如示例中的h
)通常位于堆栈中,因此内存中的位置将被其他一些函数的变量使用,您可以&# 39;保留它供自己使用。
我认为您可能会混淆免费分配内存并销毁对象。