有没有平凡的例子,其中int * x = new int实际上有用?

时间:2019-01-04 19:07:47

标签: c++

我正在学习C ++,并且遇到了两个新情况:

  • int * x = new int以动态创建对象x。 (int肯定可以用其他类型替换。)

  • int *y = new int[<other variable>]动态创建数组对象y

可以理解,第二种情况对于创建我们在编译时不知道其大小的数组非常有用。

问题

是否存在实际上需要第一种情况的实用示例?我在这里的理解有什么问题?

2 个答案:

答案 0 :(得分:2)

想象一下一些将异步完成的任务,它将产生一个整数结果。您需要能够为异步任务逻辑提供一个指向要存储结果的整数的指针,并且需要确保该整数在异步任务期间位于内存中的同一位置。

您需要动态分配一些结构,该结构将包含该长寿命的整数。而且,如果该整数确实是您所需要的,那么就可以动态地分配该整数本身。

但是,实际上存在一些问题:

  1. 为此使用unique_ptrshared_ptr可能更有意义,以使生命周期的管理更加理智。
  2. 在几乎每种实际情况下,您都需要的不仅仅是单个整数。例如,您可能需要某种方式来同步对该整数的安全访问或执行任务的某些句柄。

答案 1 :(得分:2)

在少数情况下,动态分配单个int对象实际上是有用的。

此外,可能在极少数情况下,将newnew[]的结果存储在裸指针中实际上是有用的。

现在,如果我们将问题归纳为“是否存在动态分配单个对象的实际用例” ,我们将分配一个类类型,并存储结果例如,在智能指针中,这可能会非常有用:

// member declaration
std::unique_ptr<Big> ptr_member;

// in the member initialisation list:
ptr_member(std::make_unique<Big>(args...))

顾名思义,Big的大小特别大。在这种情况下,可能需要动态分配,因为通常会限制为自动存储保留的空间。此外,这使对象的移动和交换快得多。