gpt4 book ai didi

c++ - 如果我在堆上声明一个类实例,它的所有成员也会在堆上吗?

转载 作者:行者123 更新时间:2023-12-01 21:26:15 25 4
gpt4 key购买 nike

我想知道如果我在堆上声明一个类实例(new),它的成员是否也会在堆上,即使它们不是使用 new 关键字创建的?

最佳答案

假设我们这样声明一个类:

class Foo
{
private:
std::string Bar;
public:
Foo(std::string Bar);
}

当您创建该类的新对象时,它的数据成员将保存在与对象本身相同的位置,这意味着如果您执行类似这样的操作 Foo* f = new Foo("hello"); 所有数据都存储在堆中,但如果你执行 Foo f = Foo("hello");,它将存储在堆栈中。

为什么会这样?当你创建一个像foo类的对象时,它的数据成员被称为子对象,从内存的角度来看,类对象和它的子对象是一个,这意味着如果您在堆上创建一个 foo 的对象,它的所有子对象都将存储在堆上,并且它们与类对象本身是一个对象。当您创建一个类的实例时,当您尝试访问它的数据成员时,您不会被重定向到其他地方,您只是访问对象本身的特定部分。

关于c++ - 如果我在堆上声明一个类实例,它的所有成员也会在堆上吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63139772/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com