在模板类中使用标准分配器时,模板的声明是什么样的?

时间:2019-02-16 20:28:36

标签: c++ allocator

我看到了一些使用分配器作为模板类中的类成员的示例。像这样:

template <class T, class Alloc = std::allocator<T>> class myVector
{
public:
    ...
protected:
    std::allocator<value_type> _alloc;
    ...
private:
    ...
};

但是当我删除诸如template <class T> class myVector之类的默认值模板参数时,该代码仍然有效。 那么,当我们有一个分配器作为类成员时,是否需要添加一个默认值模板参数?如果答案是肯定的,为什么?

1 个答案:

答案 0 :(得分:1)

显示的代码可能是错误的:它应该使用提供的Alloc类型进行分配,而不是硬编码std::allocator。 (并且还利用了空基类优化,以避免在分配器为空类型的情况下增加容器大小)