C++ 对象实例化内存位置

tjb272

我今天遇到了一个关于新分配对象的内存位置的问题。我有一个这样的循环:

for (int x = 0; x < n; x++) {
            GraphNode new_node;
            nodes[x] = &new_node;
}

我发现 node[] 数组的每个元素都收到了相同的地址指针,但我认为我在每次迭代中都实例化了一个新实例,因此 n 个对象将具有不同的地址。我能够使用以下代码解决这个问题,这导致了 n 个具有不同地址的对象,填充了我的数组节点 []:

for (int x = 0; x < n; x++) {
            GraphNode* new_node = new GraphNode();
            nodes[x] = new_node;
        }

这些实例化技术有什么区别?另外,我觉得第一个片段会有这样的行为很奇怪。

斯尼格法迪蒙格斯

在第一个示例中,您创建(然后打印其地址)的 GraphNode 在 for 循环结束时超出范围并被收割。当您创建下一个 - 在循环的顶部 - 用于最后一个的内存再次可用,因此用于序列中的下一个 GraphNode。

在第二个示例中,通过调用 new,您明确要求系统为该对象保留存储空间。因为你自己分配了它,GraphNode 永远不会被释放,除非你自己通过删除来释放。因为它们还没有被释放,所以当下一个 GraphNode 在循环的顶部分配时,它们的地址空间不是空闲的,并且每个人都有自己的内存空间。

需要做的事情才能看到这一点:在 GraphNode 的构造函数和析构函数中打印出一些东西。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

相同类的实例化对象是否添加到内存(C#)中?

来自分类Dev

对象的C ++实例无法读取内存

来自分类Dev

C中结构对象的内存位置

来自分类Dev

C中结构对象的内存位置

来自分类Dev

将C ++对象移动到内存位置

来自分类Dev

在C ++代码中搜索对象的实例位置

来自分类Dev

用不同的对象实例化c ++ Vector

来自分类Dev

C ++实例化“隐式”类对象

来自分类Dev

实例化对象的堆栈分配C ++

来自分类Dev

实例化和删除对象C ++

来自分类Dev

实例化类对象的客观C错误

来自分类Dev

实例化和删除对象C ++

来自分类Dev

未知的 c++ 对象实例化语法

来自分类Dev

Visual C ++检查进程内存中的对象实例大小

来自分类Dev

C ++对象实例成员函数的内存表示形式

来自分类Dev

在C ++中比较对象实例的内存地址

来自分类Dev

C ++对象实例化-使用空括号实例化对象时调用哪个构造函数

来自分类Dev

在鼠标位置实例化对象

来自分类Dev

在Robot Framework中实例化C#对象

来自分类Dev

模板类的实例化对象上的C ++模板元函数

来自分类Dev

如何防止在C#中实例化对象

来自分类Dev

使用C ++中的合成进行对象实例化计算

来自分类Dev

再谈开关内部的对象实例化(C ++)

来自分类Dev

C ++ /如何根据用户输入实例化对象

来自分类Dev

C#LINQ到SQL默认对象实例化优化?

来自分类Dev

C ++从成员对象访问实例化类的其他成员

来自分类Dev

模板类的实例化对象上的C ++模板元函数

来自分类Dev

C ++:使用友善类限制对象实例化

来自分类Dev

如何防止在C#中实例化对象