在哪里分配,堆栈还是堆?(C++)

在哪里分配,堆栈还是堆?(C++),c++,object,heap-memory,new-operator,stack-memory,C++,Object,Heap Memory,New Operator,Stack Memory,如果我有以下代码: class xyzNode { public: int x; int y; int z; // Other data }; 我主要是这样做的: xyzNode * example = new xyzNode; 我知道对象本身将在堆上分配,因为我使用了新操作符,但是对象内部的内部变量也会在堆上分配吗?我只是想确定一下,因为我没有为他们使用新的操作符 谢谢 对象只是它的成员变量加上一些其他信息,它将被放置在堆上,因此成员变量也将在那里。但是,指

如果我有以下代码:

class xyzNode
{
public:
    int x;
    int y;
    int z;
    // Other data
};
我主要是这样做的:

xyzNode * example = new xyzNode;
我知道对象本身将在堆上分配,因为我使用了新操作符,但是对象内部的内部变量也会在堆上分配吗?我只是想确定一下,因为我没有为他们使用新的操作符


谢谢

对象只是它的成员变量加上一些其他信息,它将被放置在堆上,因此成员变量也将在那里。但是,指针示例的内存将位于堆栈上。

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

xyzNode * example = new xyzNode;
这将在堆上分配一个足够大的内存块来容纳一个xyzNode对象,然后在该块中构造该对象,因此其成员存在于堆上

xyzNode example;
这将在堆栈上分配一个足够大的内存块,以容纳xyzNode对象,然后在该块中构造该对象,因此其成员存在于堆栈上

以下是一个不太常见的示例:

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

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

是的,所有对象及其成员变量都将分配到堆栈上。您正在区分对象和不存在的内部变量。嘿,亲爱的同事们,你们为什么否决这个问题?是的,这确实表明了OP的基本误解,但这些问题怎么会反对SO政策呢?@HonzaZidek downvote并不意味着反对政策。将鼠标悬停在向下投票箭头上,查看其含义。反对政策的问题将获得接近票数的票数。@Matt:我知道OP正在研究一些文本,但需要额外的帮助来理解其含义。他的问题远非一般的愚蠢这里是我的家庭作业做它而不是我的问题!这并不表明OP缺乏自己的工作。在我看来,很多SE网站的人对初学者很傲慢,因为他们认为问题太小,所以投票否决问题。谢谢你的彻底回答!我不知道新的位置,很高兴知道!:@雷米:我会害怕在没有明确警告的情况下展示新的位置,因为使用它可能会导致什么!这就像给一个7岁的男孩一把上了膛的枪:-@Vladimir:如果你分配的缓冲区大于可用堆栈空间,是的。@Vladimir:嗯,有点像:它不会在缓冲区变量的有效范围内生存。@HonzaZidek哦,是的!这是有道理的:谢谢!