Joã*_*ulo 1 c++ temporary-objects
我有这个初始化:
const char* str = std::string("a").c_str();
Run Code Online (Sandbox Code Playgroud)
在此初始化中创建了多少个临时对象?
可以"a"算是临时的。宾语?
我知道std::string("a")是临时的。宾语。
的结果c_str()是一个对象,str将其存储。所以这不是临时的。对象,对不对?
"a"是type的字符串文字const char[2],因此它是一个对象。
std::string("a")是prvalue表达式,不是临时对象(尚未)。调用时c_str(),具体化一个临时对象并对其进行调用c_str(),以获取指向临时对象数据的指针。
然后,您将指针的地址分配给,str因此现在str将指向临时对象数据的指针的地址保存下来。在该完整表达式的结尾,实体化的临时对象被破坏,从而使对该临时数据的迭代器/指针/引用无效。
这意味着str现在指向您不再拥有的内存,它被称为悬空指针。除了为其分配其他地址之外,对其执行任何操作都是未定义的行为。
因此,当所有对象结束时,您将拥有2个对象。悬空指针(str)和字符串文字("a")。