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

时间:2018-10-07 09:31:27

标签: c++ pointers variables dynamic

假设我的指针没有指向数组,那么该块如何:

int *ptr_a;

ptr_a = new int;
*ptr_a = 1;

与以下不同:

int *ptr_a = 1;

内存分配上有区别吗?什么时候可以使用另一种呢?

1 个答案:

答案 0 :(得分: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的新1并在ptr_a超出范围后重新分配内存。 / p>