声明变量vs动态地将内存分配给c ++中的变量?

jer*_*ron 3 c++ variables

我只是在声明一个变量之间的区别时有点困惑,例如:

int n;
Run Code Online (Sandbox Code Playgroud)

并使用"new"动态地将内存分配给变量,例如:

int m = new int;
Run Code Online (Sandbox Code Playgroud)

我注意到只是在处理一个简单的链表项目时,当我以节点对象的形式插入一个新值时,我必须动态创建一个新的节点对象并将所需的值附加到它,然后将其链接到我列表的其余部分.但是..在同一个函数中,我可以定义另一个节点对象,例如.NodeType*N. 并使用此指针遍历我的列表.我的问题是..当我们只是声明一个变量时,内存是不是立刻被分配了......或者有什么区别?

谢谢!

Luc*_*ore 5

首选可能的自动存储分配变量:

int n;
Run Code Online (Sandbox Code Playgroud)

过度

int* m = new int; // note pointer
Run Code Online (Sandbox Code Playgroud)

在您的情况下优先考虑动态分配的原因是链接列表的定义方式.即每个节点都包含指向下一个节点的指针(可能).由于节点必须存在于创建它们之外的点,因此它们是动态分配的.

NodeType*N. 并使用此指针遍历我的列表

是的,你可以这样做.但请注意,这只是一个指针声明.您必须将其分配给实际使用它的有意义的东西.

我的问题是..当我们只是声明一个变量时,内存是不是立刻被分配了......或者有什么区别?

实际上,两种情况都是定义,而不仅仅是声明.

int n;
Run Code Online (Sandbox Code Playgroud)

创建一个未初始化int的自动存储;

int* n;
Run Code Online (Sandbox Code Playgroud)

创建一个指针int.这是悬空,它没有指向有效的内存位置.

int* n = new int;
Run Code Online (Sandbox Code Playgroud)

创建一个指针并将其初始化为包含未初始化的有效内存位置int.

int* n = new int();
Run Code Online (Sandbox Code Playgroud)

创建一个指针并将其初始化为包含值初始化int(即0)的有效内存位置.