我有以下代码,当调用其析构函数时它不会打印正确的字符串
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() {
}
输出:构造的静态 Tracer。
“1.Q”</p>
但以下代码按预期工作:
Tracer( std::string name_in)
: name{ std:move(name_in) } {
std::cout << name << " constructed.\n";
}
private:
std::string name;
输出:构造的静态 Tracer。
静态示踪剂被破坏。
或者当使用 stringview 或简单的 stings 时。
在第一个代码中的程序终止期间,我们是如何丢失对字符串的引用的?
我们不应该使用 move() 释放对字符串的引用,因为它具有构造函数作用域吗?
谢谢!