Поскольку std::string
обычно выделяет кучу памяти для хранения строки.В этом случае std::string
неявно создается из строкового литерала (который сам по себе находится в статическом хранилище).Некоторые реализации строк используют небольшой буфер для обслуживания небольших строк, но здесь это не так, и в любом случае зависит от реализации.
Неважно, что name
не используется - в основном, setAttrib("position", 3)
является сокращением для setAttrib(std::string("position"), 3);
, поэтому, когда элемент управления вводит setAttrib
, память уже выделена (конечно, в вашем изолированном примере кода компилятор мог бы встроить getAttrib
и затем отброситьПостроение строк вообще, но это оптимизация компилятора, а не языковая функция).
Обратите внимание, что временные объекты, созданные во время вызова функции, автоматически уничтожаются при возврате функции, поэтому утечка памяти отсутствует.