我正在学习C ++,并且遇到了两个新情况:
int * x = new int
以动态创建对象x
。 (int
肯定可以用其他类型替换。)
int *y = new int[<other variable>]
动态创建数组对象y
。
可以理解,第二种情况对于创建我们在编译时不知道其大小的数组非常有用。
是否存在实际上需要第一种情况的实用示例?我在这里的理解有什么问题?
答案 0 :(得分:2)
想象一下一些将异步完成的任务,它将产生一个整数结果。您需要能够为异步任务逻辑提供一个指向要存储结果的整数的指针,并且需要确保该整数在异步任务期间位于内存中的同一位置。
您需要动态分配一些结构,该结构将包含该长寿命的整数。而且,如果该整数确实是您所需要的,那么就可以动态地分配该整数本身。
但是,实际上存在一些问题:
unique_ptr
或shared_ptr
可能更有意义,以使生命周期的管理更加理智。答案 1 :(得分:2)
在少数情况下,动态分配单个int
对象实际上是有用的。
此外,可能在极少数情况下,将new
或new[]
的结果存储在裸指针中实际上是有用的。
现在,如果我们将问题归纳为“是否存在动态分配单个对象的实际用例” ,我们将分配一个类类型,并存储结果例如,在智能指针中,这可能会非常有用:
// member declaration
std::unique_ptr<Big> ptr_member;
// in the member initialisation list:
ptr_member(std::make_unique<Big>(args...))
顾名思义,Big
的大小特别大。在这种情况下,可能需要动态分配,因为通常会限制为自动存储保留的空间。此外,这使对象的移动和交换快得多。