如何在 Vector 实现中适当地使用 std::allocator<T>

How to use std::allocator<T> appropriately in Vector implementation

我正在尝试自己复制矢量实现,但我在分配器方面遇到了困难。 基本上我正在尝试使用 std::allocator 的 .allocate() 成员函数来分配一些内存而不构造任何东西但是我失败了。

这是给我带来麻烦的代码,我认为我做错了。对此有任何帮助将不胜感激。我注意到从参数中删除 const & 是有效的,但我仍然认为这不是正确的方法。

namespace container {

    template<typename Type, typename Allocator = std::allocator<Type>>
    class vector
    {
    private:
        Type* m_vector;
        std::size_t m_capacity{};
        std::size_t m_size{};


    public:
        // Aliases  
        using size_type = std::size_t;
        using init_list_type = std::initializer_list<Type>;
        using reference = Type&;
        using const_reference = const Type&;
        using pointer = Type*;
        using const_pointer = const Type*;

        // Constructors
        constexpr vector() noexcept : m_vector{ nullptr } {}
        constexpr explicit vector(size_type length, const Allocator& allocator = Allocator()) // Here is the issue, this doesn't work if allocator is const&, but it works if it's not 
            : m_vector{ allocator.allocate(length) }, m_size{ length }, m_capacity{ length } {}

您应该在矢量对象中保留分配器的副本。您将需要在析构函数中使用它来释放在构造函数中分配的内存。