colorname
@colorname

Как исправить код из книги Lippman C++ Primer использующий std::allocator и метод construct?

На странице 666 в последнем русском издании показан исходный код реализации простого вектора строк. В этом коде используется std::allocator а также его методы, в частности construct, который как я понял убрали с 20 версии языка. Получается что предоставленный код неактуальный на данный момент. Как его можно изменить чтобы все таки изучить тему "Классы управляющие динамической памятью"?

Вот версия исходного кода предоставленного в книге:
class StrVec
{
public:
    StrVec() : elements(nullptr), first_free(nullptr), cap(nullptr) {}
    StrVec(const StrVec&);
    StrVec& operator=(const StrVec&);
    ~StrVec();
    void push_back(const std::string&);
    std::size_t size() const { return first_free - elements; }
    std::size_t capacity() const { return cap - elements; }
    std::string* begin() const { return elements; }
    std::string* end() const { return first_free; }
private:
    std::allocator<std::string> alloc;
    void chk_n_alloc()
    {
        if (size() == capacity()) reallocate();
    };
    std::pair<std::string*, std::string*> alloc_n_copy(const std::string*, const std::string*);
    void free();
    void reallocate();
    std::string* elements;
    std::string* first_free;
    std::string* cap;
};

void StrVec::push_back(const std::string& str)
{
    chk_n_alloc();
    alloc.construct(first_free++, str); // ??????
}
  • Вопрос задан
  • 50 просмотров
Решения вопроса 1
YuriyVorobyov1333
@YuriyVorobyov1333
Software Developer
Использовать allocator_traits и его construct

Референс
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы