它将被分配到哪里,堆栈还是堆?(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
正在使用,并且它在指定的缓冲区内构造对象,该缓冲区位于堆栈上。
相关文章:
- 算法问题:查找从堆栈中弹出的所有序列
- 使用模板进行堆栈实现; "name followed by :: must be a class or namespace"
- Visual Studio(或任何其他工具)能否将地址解释为调用堆栈(boost上下文)的开头
- 为什么调用堆栈数组会导致内存泄漏
- gdb错误:Backtrace已停止:上一帧与此帧相同(堆栈已损坏?)
- 在 leetcode 上提交解决方案时出现堆栈缓冲区溢出错误
- 我的 int main() 中出现堆栈溢出错误
- 堆栈和队列是否像C++中的数组一样传递?
- 拥有映射的现代方法,该映射可以指向或引用已在堆栈上分配的不同类型的数据
- 为什么 STL 容器适配器堆栈中的 top 返回常量引用?
- 从堆栈分配的原始指针构造智能指针
- 在函数范围内在堆栈上分配的数组在离开函数时是否总是被释放?
- 堆栈中大小变量输入错误 (C++)
- 堆栈问题(平衡表达式问题集)
- C++ 在堆栈中包含多态属性的类对象存储
- 用于解析 win64 堆栈跟踪的命令行客户端(可以访问符号服务器)
- 在 C++ 中使用链表进行堆栈
- 变量周围的堆栈'...'已损坏
- 在 gtest 中初始化堆栈上的引用变量的隔离错误
- C++线程的可用堆栈大小