Ser*_*ket 4 c++ memory object heap-memory stack-memory
我想知道如果我在堆上声明一个类实例(新),即使它们是使用 new 关键字创建的\xe2\x80\x99t,它的成员也会在堆上吗?
\n假设我们声明一个类,如下所示:
class Foo
{
private:
std::string Bar;
public:
Foo(std::string Bar);
}
Run Code Online (Sandbox Code Playgroud)
当您创建该类的新对象时,它的数据成员将保存在与对象本身相同的位置,这意味着如果您执行类似的操作,Foo* f = new Foo("hello");所有数据都将存储在堆中,但如果您这样做,Foo f = Foo("hello");它将被存储在堆栈上。
为什么这样?当你创建一个像 的类的对象时foo,它的数据成员被称为sub-objects,从内存的角度来看,类对象和它的子对象是一个,这意味着如果你foo在堆上创建一个 的对象,它的所有子对象都是对象将存储在堆上,并且它们与类对象本身是一体的。当您创建类的实例时,当您尝试访问它的数据成员时,您不会被重定向到其他地方,您只需访问对象本身内的特定部分。