我正在学习 C++,我知道“新”关键字用于将内存中的地址分配给指针。而且我认为在使用“nullptr”时会初始化一个指向任何内容的指针。那是对的吗?参考示例:
//using nullptr
int *x = nullptr; //this is just a pointer that points to nothing and
//will need to be initialized with an address before it
//it can be used. Correct?
//using new
int *x = new int; //this is basically giving x an address in memory. Will the
//address have some residual value stored in it or will
//it contain zero?
您什么时候会使用其中一种? new 仅用于动态内存分配还是有其他应用程序?如果您可以声明一个指向 nullptr 的指针,然后稍后再对其进行初始化,为什么还要初始化它呢?
谢谢您的帮助!
原文由 Adam Halfaker 发布,翻译遵循 CC BY-SA 4.0 许可协议
您对
new int
和int *x = new int;
的理解不正确(或者至少,您的措辞不正确)。new int
分配一些内存。它不会“为指针分配内存”,它只是分配内存。它提供了一个指向该内存的指针,该内存以前不存在。int *x;
还为名为x
的变量分配内存。x
是一个变量,其值为另一个对象的地址。 (与其他类型的变量相反,例如,其值可能是数字或字符串)。int *x = nullptr;
表示x
持有一个称为“空指针”的特殊值,它不表示任何其他对象。int *x = new int
表示x
持有的是new int
分配的那块内存的地址。所以这一行涉及两个分配:x
,以及由new
分配的未命名内存。在后一种情况下,您可以分别输出每个分配的地址,例如: