在C++中,如果我可以直接将整数分配给指针而不使用"new",为什么要使用"new"?

In C++, why should I use "new" if I can directly assign an integer to the pointer without using "new"?

本文关键字:new 指针 为什么 分配 我可以 如果 C++ 整数      更新时间:2023-10-16

假设我的指针没有指向数组,这个块是怎么回事:

int *ptr_a;
ptr_a = new int;
*ptr_a = 1;

与以下产品相比不同:

int *ptr_a = 1;

内存分配是否有差异,何时使用一个而不是另一个?

int *ptr_a = 1;

不会创建新的int,这会创建一个指针ptr_a并为其分配值1,这意味着该指针将指向地址0x00000001。它不是一个整数。如果您稍后尝试将指针与*ptr_a = 2一起使用,您将获得分段错误,因为指针不指向分配的内存空间(在这种情况下,它指向内核内存,这是一个禁忌(。

现在一个好的原则是使用std::unique_ptr<int> ptr_a = std::make_unique<int>(1)它将分配值为1的新int,并在内存超出范围后ptr_a释放内存。