我想知道使用智能指针(在下面的代码中为Box
)通过调用构造函数(对于我更经典的)声明来声明Box3
是否有任何优势(作为{ {1}}在下面的代码中)或者如果这两个结构之间的差异基本上是主观偏好的问题。
Box2
答案 0 :(得分:8)
相对于C ++中的其他基本操作,动态分配是一项昂贵的操作,因此您应该在不需要它的地方避免使用它。
也就是说,一个很大的区别是动态分配很慢。
另一个区别是你可以用它做什么。通过移动所有权,可以使动态分配的实例在其创建的块之后保持不变。相反,当执行离开块时,直接声明的变量不再存在。
答案 1 :(得分:0)
Box2 - 在堆栈上分配
优点
Disadvatages
Box
Box2
移动到其他对象。Box3 - 在堆上分配
优点
Box
Box3
Disadvatages
答案 2 :(得分:-1)
提供的代码没有优势,只有缺点。