![](/img/trans.png)
[英]Where does a stack object inside a heap allocated object gets allocated in 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.