我猜以下所有解决方案都是等效的(部分来自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
。
编辑:删除了问题中的“最佳方式”,因为它并不真正相关。
答案 0 :(得分:2)
在编程中,没有“最佳方式”这样的东西与目标无关。
所有变体都有其优点和缺点,您可以根据自己的想法进行评估。放弃绝望的人并选择剩下的一些。
答案 1 :(得分:1)
我想补充一点,如果你的指针指向堆中分配的内存(这是非常重要的)并且将在以后删除,你不应该使用现代C ++中的前2个选项,因为它不安全抛出异常的情况。
尽可能多地使用RAII原则,所以一般情况下你应该选择第3和第4选项。第3和第4个选项都不会产生任何开销(除了增加编译时间,因为它们使用模板),所以你没有任何重大缺点。