如何解决在堆上创建对象时,成员变量在哪里创建?
我对内存分配有些困惑。在堆上创建对象时,成员变量在哪里创建(在堆栈还是堆上?)?例如,假设我们具有Cat类,如下所示。
class Cat { public: int itsage;};
现在假设我们在主函数中有以下代码行。
Cat * Frisky= new Cat;
现在我想在这里,指针变量Frisky是在 stack 上创建的,它在 heap 上存储内存的内存地址(是吗?)。但是我很困惑在哪里创建整型变量?如果itage本身就是指针,还会发生什么?即
int * itsage;
谢谢。
解决方法
itsage
是Cat
的子对象,这意味着它是Cat
对象本身的一部分。因此,它作为堆分配的Cat
对象的一部分存在。 new Cat
创建Cat
对象和所有子对象,它们都在同一分配内。
如果它是一个指针,那仍然是正确的。指针值将是Cat
对象的一部分,但它可以指向其他地方的int
。
请注意,C ++标准不使用术语“堆栈”和“堆”。函数局部变量(非静态)具有自动存储持续时间,并且使用new T
创建的对象具有动态存储持续时间。在幕后,具有这些存储持续时间的值为通常分别使用堆栈和堆来实现,但是使用堆栈或堆结构不需要遵循标准的实现。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。