这些存储指针数组的方法之间有区别吗?

时间:2013-07-01 17:34:38

标签: c++ boost c++11 shared-ptr

我猜以下所有解决方案都是等效的(部分来自4),但这只是一个偏好问题吗?

Object* myArray[10];                             // 1. C-style
std::array<Object*, 10> myArray;                 // 2. C++11
boost::ptr_array<Object, 10>myArray;             // 3. Boost
std::array<std::unique_ptr<Object>, 10> myArray; // 4. taking ownership of the pointer

为什么Boost中没有一个班级以ptr_array的方式做第4行?是不是因为如果包含它的类占用所有权并在必要时销毁对象,通常没有充分的理由来存储指针数组?

我可以看到第4行的另一种选择是拥有一个对象数组而不是对象指针:std::array<Object, 10> myArray

编辑:删除了问题中的“最佳方式”,因为它并不真正相关。

2 个答案:

答案 0 :(得分:2)

在编程中,没有“最佳方式”这样的东西与目标无关。

所有变体都有其优点和缺点,您可以根据自己的想法进行评估。放弃绝望的人并选择剩下的一些。

答案 1 :(得分:1)

我想补充一点,如果你的指针指向堆中分配的内存(这是非常重要的)并且将在以后删除,你不应该使用现代C ++中的前2个选项,因为它不安全抛出异常的情况。

尽可能多地使用RAII原则,所以一般情况下你应该选择第3和第4选项。第3和第4个选项都不会产生任何开销(除了增加编译时间,因为它们使用模板),所以你没有任何重大缺点。