1

我想下面的所有解决方案都是等效的(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.

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

4

2 回答 2

2

在编程中,没有独立于目标的“最佳方式”之类的东西。

所有变体都有其优点和缺点,您可以根据您想要做什么来评估它们。丢掉那些没有希望的,挑一些剩下的。

于 2013-07-01T17:40:21.543 回答
1

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

尽可能多地使用 RAII 原则,所以通常你应该更喜欢第 3 和第 4 选项。第 3 和第 4 选项都不会产生任何开销(除了增加编译时间,因为它们使用模板),因此您没有任何主要缺点。

于 2013-07-01T21:15:18.663 回答