【发布时间】:2012-05-09 17:49:57
【问题描述】:
我知道这是一个非常古老的辩论,已经在世界各地讨论过很多次。但是我目前在决定在特定情况下应该在静态数组和动态数组之间使用哪种方法而不是另一种方法时遇到了麻烦。实际上,我不会使用 C++11,我会使用静态数组。但我现在很困惑,因为两者可能有同等的好处。
第一个解决方案:
template<size_t N>
class Foo
{
private:
int array[N];
public:
// Some functions
}
第二种解决方案:
template<size_t N>
class Foo
{
private:
int* array;
public:
// Some functions
}
我不能碰巧选择,因为两者各有优势:
- 静态数组更快,我们根本不关心内存管理。
- 只要未分配内存,动态数组就不会加权。在那之后,它们不像静态数组那样好用。但是从 C++11 开始,我们可以从移动语义中获得很大的好处,而静态数组则无法使用。
我认为没有一个好的解决方案,但我想获得一些建议,或者只是想知道你对这一切的看法。
【问题讨论】:
-
你的两个解决方案应该是:你的第一个,或者一个向量并且没有 size_t 模板。您应该避免使用可以毫无问题地使用 STL 容器的原始指针。
-
@fontanini:如果要针对 C++11 进行修改,那么两个解决方案应该是
std::array<T,N>或std::vector<T>。 -
@DavidRodríguez-dribeas 是的,先生!
标签: c++ arrays templates c++11 move-semantics