假设我的指针没有指向数组,那么该块如何:
int *ptr_a;
ptr_a = new int;
*ptr_a = 1;
与以下不同:
int *ptr_a = 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>