Учитывая такой код:
std::string str = "abcdef";
const size_t num = 50;
const size_t baselen = str.length();
while (str.length() < num)
str.append(str, 0, baselen);
Безопасно ли вызывать std::basic_string<T>::append()
как таковое? Не удается ли потерять память источника, увеличив ее до операции копирования?
Я не мог найти ничего в стандарте, специфичном для этого метода. Он говорит, что приведенное выше эквивалентно str.append(str.data(), baselen)
, что, я думаю, может быть не совсем безопасным, если не будет обнаружение таких случаев внутри append(const char*, size_t)
.
Я проверил несколько реализаций, и они казались безопасными так или иначе, но мой вопрос в том, гарантируется ли это поведение. Например. "Добавление std::vector к себе, undefined поведение?" говорит об этом не для std::vector
.