Для строки "123" отдельное выделение в куче обычно не требуется благодаря оптимизации коротких строк (SSO), но стандарт C++ не гарантирует такую реализацию std::string.
Определение необходимости выделения памяти для std::string при вызове функции
Для строки "123" отдельное выделение в куче обычно не требуется благодаря оптимизации коротких строк (SSO), но стандарт C++ не гарантирует такую реализацию std::string.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Необходимо понять, приводит ли создание объекта std::string внутри функции к выделению памяти в куче.
void method_string()
{
std::string str("123");
}
Ответ
Для строки "123" отдельное выделение в куче обычно не требуется благодаря оптимизации коротких строк (SSO), но стандарт C++ не гарантирует такую реализацию std::string.
При SSO символы небольшой строки размещаются во внутреннем буфере самого объекта. Порог зависит от стандартной библиотеки, типа символа и ABI; нельзя считать фиксированное число символов универсальным правилом.
Сам str имеет автоматическое время хранения, но это не доказывает отсутствие динамической памяти у его содержимого. Для конкретной сборки выделения проверяют профилировщиком или инструментированным аллокатором. Если нужна только неизменяемая ссылка на литерал, std::string_view не владеет буфером и не требует его копирования.