`make_unique`优于普通构造函数?

时间:2016-04-08 16:40:55

标签: c++

我想知道使用智能指针(在下面的代码中为Box)通过调用构造函数(对于我更经典的)声明来声明Box3是否有任何优势(作为{ {1}}在下面的代码中)或者如果这两个结构之间的差异基本上是主观偏好的问题。

Box2

3 个答案:

答案 0 :(得分:8)

相对于C ++中的其他基本操作,动态分配是一项昂贵的操作,因此您应该在不需要它的地方避免使用它。

也就是说,一个很大的区别是动态分配很慢。

另一个区别是你可以用它做什么。通过移动所有权,可以使动态分配的实例在其创建的块之后保持不变。相反,当执行离开块时,直接声明的变量不再存在。

答案 1 :(得分:0)

Box2 - 在堆栈上分配

优点

  • 分配很便宜(只是递减堆栈指针)

Disadvatages

  • 声明
  • 时,必须创建Box2的关联Box
  • 堆栈内存有限,如果用完了
  • ,程序可能会崩溃
  • 如果不单独复制(或移动)所有数据成员,则无法将Box2移动到其他对象。

Box3 - 在堆上分配

优点

  • 你可以捕获内存条件`catch(std :: bad_alloc)并可能在不崩溃的情况下处理它们
  • 您可以在声明Box
  • 后很好地创建对象Box3
  • 您可以移动Box对象,而无需复制(或移动)所有单个数据成员。

Disadvatages

  • Box3在堆上分配,这是一个缓慢的操作。

答案 2 :(得分:-1)

提供的代码没有优势,只有缺点。