这将被分配,堆叠或堆? (C ++)

时间:2014-08-11 21:53:57

标签: c++ object stack heap new-operator

如果我有以下代码:

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

主要是我这样做:

xyzNode * example = new xyzNode;

我知道对象本身将在堆上分配,因为我正在使用“new”运算符,但是对象内的内部变量是否也会在堆上分配?我只是想确定,因为我没有使用新的运算符。

谢谢!

2 个答案:

答案 0 :(得分:3)

Object(它只是其成员变量加上一些其他信息)将被放置在堆上,因此成员变量也将存在。然而,指针example的内存将在堆栈中。

答案 1 :(得分:1)

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

xyzNode * example = new xyzNode;

这会在堆上分配一个足以容纳xyzNode对象的内存块,然后构造该块中的对象,从而使其成员存在于堆上。

xyzNode example;

这会在堆栈上分配一个足以容纳xyzNode对象的内存块,然后构造该块中的对象,从而使其成员存在于堆栈中。

这是一个不太常见的例子:

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

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