它将被分配到哪里,堆栈还是堆?(c++)

Where will this be allocated, stack or heap? (C++)

本文关键字:c++ 堆栈 分配      更新时间:2023-10-16

如果我有以下代码:

class xyzNode
{
public:
    int x;
    int y;
    int z;
    // Other data
};

我主要是这样做的:

xyzNode * example = new xyzNode;

我知道对象本身将被分配到堆上,因为我使用了"new"操作符,但是对象内部的变量也会被分配到堆上吗?我只是想确定一下,因为我没有对它们使用new操作符。

谢谢!

对象(它只是它的成员变量加上一些其他信息)将被放置在堆上,所以成员变量也将在那里。然而,指针example的内存将在堆栈上。

对象的内存由其成员变量组成,因此这些变量将存在于对象分配到的任何内存块中。

xyzNode * example = new xyzNode;

在堆上分配一个足够大的内存块来容纳一个xyzNode对象,然后在该块中构造对象,因此它的成员存在于堆上。

xyzNode example;

在堆栈上分配一个足够大的内存块来容纳一个xyzNode对象,然后在该块中构造对象,因此它的成员存在于堆栈中。

下面是一个不太常见的例子:

unsigned char buffer[sizeof(xyzNode)];
xyzNode * example = new(buffer) xyzNode;

成员存在于堆栈上,因为placement-new正在使用,并且它在指定的缓冲区内构造对象,该缓冲区位于堆栈上。