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

-7 c++ variables pointers dynamic

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

int *ptr_a;

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

与以下不同:

int *ptr_a = 1;
Run Code Online (Sandbox Code Playgroud)

内存分配是否存在差异,何时使用其中一个?

Mat*_*her 7

int *ptr_a = 1;不创建新的int,这会创建一个指针ptr_a并为其赋值1,这意味着该指针将指向该地址0x00000001.它不是整数.如果您稍后尝试使用指针*ptr_a = 2,则会出现分段错误,因为指针未指向已分配的内存空间(在此精确的情况下,它指向内核内存,这是禁止的).

现在一个好的原则是使用std::unique_ptr<int> ptr_a = std::make_unique<int>(1)它将分配一个int带有值的new ,1并在一旦ptr_a超出范围时释放内存.

  • 我建议一个好的原则是使用`int a`如果需要单个`int`而不是用指向单个动态分配的`int`或`std :: unique_ptr <int>`的指针.如果你需要任意大小的`int`s集合,请使用合适的标准容器,例如`std :: vector <int>`. (3认同)