在堆上创建对象时,成员变量在哪里创建?

问题描述

我对内存分配有些困惑。在堆上创建对象时,成员变量在哪里创建(在堆栈还是堆上?)?例如,假设我们具有Cat类,如下所示。

class Cat { public: int itsage;};

现在假设我们在主函数中有以下代码行。

Cat * Frisky= new Cat;

现在我想在这里,指针变量Frisky是在 stack 上创建的,它在 heap 上存储内存的内存地址(是吗?)。但是我很困惑在哪里创建整型变量?如果itage本身就是指针,还会发生什么?即 int * itsage;

谢谢。

解决方法

itsageCat的子对象,这意味着它是Cat对象本身的一部分。因此,它作为堆分配的Cat对象的一部分存在。 new Cat创建Cat对象和所有子对象,它们都在同一分配内。

如果它是一个指针,那仍然是正确的。指针值将是Cat对象的一部分,但它可以指向其他地方的int

请注意,C ++标准不使用术语“堆栈”和“堆”。函数局部变量(非静态)具有自动存储持续时间,并且使用new T创建的对象具有动态存储持续时间。在幕后,具有这些存储持续时间的值为通常分别使用堆栈和堆来实现,但是使用堆栈或堆结构不需要遵循标准的实现。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...