在c++;,如何销毁内置类型? 在C++中,如果我们想破坏内置类型(如int),以节省内存,当程序运行时我们应该怎么做?如果我们这样做: int h; int *p=&h; delete p;

在c++;,如何销毁内置类型? 在C++中,如果我们想破坏内置类型(如int),以节省内存,当程序运行时我们应该怎么做?如果我们这样做: int h; int *p=&h; delete p;,c++,C++,要销毁h,我需要创建一个指向h的指针,然后执行删除操作,但指针p仍然消耗相同的内存,似乎我没有做任何事情来保存运行中的内存,我该怎么办?你不是在问如何销毁“内置类型”而是如何用自动或静态存储时间销毁对象。这是您无法做到的:您的代码的行为是未定义的 您只能对调用new返回给您的指针调用delete 因此,您的方法是一种无效的内存节省技术。简单的内置类型不需要任何破坏-您可以用任何您喜欢的内容覆盖它们的内存。当变量的寿命结束时,这不会产生任何负面影响但是请注意,此类变量(如示例中的h)通常位于堆栈上

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

你不是在问如何销毁“内置类型”而是如何用自动或静态存储时间销毁对象。这是您无法做到的:您的代码的行为是未定义的

您只能对调用
new
返回给您的指针调用
delete


因此,您的方法是一种无效的内存节省技术。

简单的内置类型不需要任何破坏-您可以用任何您喜欢的内容覆盖它们的内存。当变量的寿命结束时,这不会产生任何负面影响但是请注意,此类变量(如示例中的
h
)通常位于堆栈上,因此内存中的位置将被其他函数的变量使用,您不能将其保留供自己使用


我认为您可能会混淆释放分配的内存和销毁对象。

正如另一个答案中所述,您不能手动销毁内置类型(*)

但是,您可以缩小其定义范围:

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;
),但您不能销毁它们,因为它们没有析构函数。

您只能删除使用
new
分配的内容。通常你也不需要这样做。与其他变量相比,变量(全局、局部或静态)占用的空间通常非常小。如果使用临时变量,可以在子范围中创建它们,以便在代码超出范围时删除变量“如果我们这样做:”-我们的程序有未定义的行为。如果你想编写一个高效的C++,那么多读有关C++编程,它是一个非常有效的编译技术的猫。删除操作只是为了破坏H,h消耗一些内存,当我不想使用它时,我不能销毁它以节省一些内存吗?我想知道的是指针占用的内存是否会影响程序的有效性。@Kaiser您不能删除h。C++在很大程度上是不管理内存的,所以你想做的是向后一点。无论如何,您不能删除任何不是通过
new
创建的内容。不,到处使用
new
这样你就可以
以后删除
东西,这并不聪明。使用作用域:
{int i;}
执行此代码后清理
i
automatically@StoryTeller:的确如此;-)所以只有动态记忆才会影响程序的有效性?我不确定你所说的程序的“有效性”是什么意思。如果你的意思是“内存占用”,那么-你可能会超出堆栈空间,例如,通过分配长数组的递归调用,最终导致堆栈溢出(如本网站的名称)。我补充了一个说明,这样更好吗?