繁体   English   中英

这将在哪里分配,堆栈或堆? (C++)

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

如果我有以下代码:

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 ,并且它在堆栈上的指定缓冲区内构造对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM