在c ++中,如何销毁内置类型?

时间:2017-07-24 11:35:03

标签: c++

在c ++中,如果我们想破坏内置类型(对于int)以在程序运行时保存内存我们应该怎么做?如果我们这样做:

int h;
int *p=&h;
delete p;

要销毁h,我需要创建一个指向h然后执行删除操作的指针,但指针p仍然消耗相同的内存,似乎我没有做任何事情来保存运行内存,我该怎么办?

3 个答案:

答案 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;保留它供自己使用。

我认为您可能会混淆免费分配内存并销毁对象。