На этом шаге мы перечислим распределители памяти, используемые для строк.
Для строк также определены стандартные члены классов, обеспечивающие поддержку распределителей памяти.
string::allocator_type
allocator_type string::get_allocator 0 const
Распределитель памяти может также передаваться в необязательном аргументе всех конструкторов строк. Ниже перечислены строковые конструкторы с необязательными аргументами в соответствии со стандартом:
namespace std { template<class charT, class traits = char_traits<charT>, class Allocator = allocator<charT> > class basic_string { public: // Конструктор по умолчанию explicit basic_string(const Allocator& a = Allocator()); // Копирующий конструктор basic_string(const basic_string& str, size_type str_idx = 0, size_type str_num = npos); basic_string(const basic_string& str, size_type str_idx, size_type str_num, const Allocator&); // Конструктор для C-строк basic_string(const charT* cstr, const Allocator& a = Allocator()); // Конструктор для символьных массивов basic_string(const charT* chars, size_type chars_len, const Allocator& a = Allocator()); // Конструктор для num экземпляров символа basic_string(size_type num, charT c, const Allocator& a = Allocator()); // Конструктор для интервала символов template<class InputIterator> basic_string(InputIterator beg, InputIterator end, const Allocator& a = Allocator()); ... }; }
Эти конструкторы ведут себя так, как описано на 389 шаге, но дополнительно позволяют передать пользовательский объект распределителя памяти. Если строка инициализируется другой строкой, то вместе с содержимым копируется и распределитель памяти.
Со следующего шага мы начнем знакомиться с числовыми типами.