На странице 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); // ??????
}