c++ - 指针在赋值前会占用内存吗?

标签 c++ pointers memory new-operator delete-operator

假设我有这个:

int *thing;

是否使用了 4 个字节的内存,即使我没有分配任何内存?当我分配一些东西 (thing=new int;) 时,它是否会使用 8 个字节,因为指针本身可能会占用内存?

另外,假设我有这个:

struct thingy
{
    int *intThing;
}

thingy *result=new thingy;
thingy.intThing=new int;
delete thingy;

intThing 是否也会被删除,或者内存会一直漂浮而没有任何指向它?

最佳答案

所有变量(原始数字类型、类实例、指针、引用)开始占用空间。

然后优化器介入,可能会显示一些存储是冗余的(值是常量,或者总是可以从另一个变量获得,等等)

让变量消失是优化器的明确目标之一,因为它倾向于减少寄存器压力,提高缓存性能等。

在您的示例中,指针 intThing 将被销毁(它是一个成员,并且成员在其父对象销毁时死亡),但它指向的内存(正确地称为 * thingy.intThing 而不仅仅是 thingy.intThing) 不会。如果它的地址没有存储在其他地方,那么它就会被泄露。

关于c++ - 指针在赋值前会占用内存吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19474282/

相关文章:

c++ - 我无法从中得到输出

c++ - 具有多个文件的小型 C++ 程序无法编译

c# - 指向 Byte[] 数组的不安全 Int32 指针

c++ - 基本 C++ 函数指针和结构

java - Android:释放引用后内存未释放

c++ - Qt Creator 中的通用 C++ 项目 - 没有制定目标的规则

c++ - 保存指向在本地创建的堆的指针

c++ - 如何调用一个函数,该函数的参数是指向结构指针数组的指针和未指定的大小

java - 缩小集合的内存开销

c - 内存分配详细信息