在模板 class 中使用标准分配器时,模板声明是什么样的?
What does a declaration of template look like when using the standard allocator in a template class?
我看到了一些将分配器用作模板 class 成员的示例 class。比如:
template <class T, class Alloc = std::allocator<T>> class myVector
{
public:
...
protected:
std::allocator<value_type> _alloc;
...
private:
...
};
但是当我删除像 template <class T> class myVector
这样的默认值模板参数时,代码仍然有效。
那么当我们有一个分配器作为 class 成员时,我们是否需要添加一个默认值模板参数?如果答案是肯定的,为什么?
显示的代码可能是错误的:它应该使用提供的 Alloc
类型来分配,而不是硬编码 std::allocator
。 (并且还利用 empty-base-class 优化,以避免在分配器为空类型时增加容器大小)
我看到了一些将分配器用作模板 class 成员的示例 class。比如:
template <class T, class Alloc = std::allocator<T>> class myVector
{
public:
...
protected:
std::allocator<value_type> _alloc;
...
private:
...
};
但是当我删除像 template <class T> class myVector
这样的默认值模板参数时,代码仍然有效。
那么当我们有一个分配器作为 class 成员时,我们是否需要添加一个默认值模板参数?如果答案是肯定的,为什么?
显示的代码可能是错误的:它应该使用提供的 Alloc
类型来分配,而不是硬编码 std::allocator
。 (并且还利用 empty-base-class 优化,以避免在分配器为空类型时增加容器大小)