У меня есть следующий код, и он не печатает правильную строку, когда ее деструктор называется
struct Tracer {
Tracer( const std::string& name_in)
: name{ name_in } {
std::cout << name << " constructed.\n";
}
~Tracer() {
std::cout << name << " destructed.\n";
}
private:
const std::string& name;
};
Tracer static_tracer{ "static Tracer" };
int main() {
}
Вывод: stati c Построитель трассировки.
�1�Q�
Но следующий код работает должным образом:
Tracer( std::string name_in)
: name{ std:move(name_in) } {
std::cout << name << " constructed.\n";
}
private:
std::string name;
Вывод: stati c Трассировка построена.
stati c Трассировка уничтожена.
Или когда используется просмотр строки или простые строки.
Как мы потеряли ссылку на строку во время завершения программы в первом коде?
Также не следует ли потерять ссылку на строка, использующая move (), поскольку она имеет область видимости конструктора?
Спасибо!