在模板 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 优化,以避免在分配器为空类型时增加容器大小)