"a"
是type的字符串文字const char[2]
,因此它是一个对象。
std::string("a")
是prvalue表达式,不是临时对象(尚未)。调用时c_str()
,将实例化一个临时对象并对其进行调用c_str()
,以获取指向临时对象数据的指针。
然后,您将指针的地址分配给,str
因此现在str
将指向临时对象数据的指针的地址保存。在该完整表达式的结尾,实体化的临时对象被破坏,从而使对该临时数据的迭代器/指针/引用无效。
这意味着str
现在指向您不再拥有的内存,它被称为悬挂指针。除了为其分配其他地址之外,对其执行任何操作都是未定义的行为。
因此,当所有对象都结束时,您将拥有2个对象。悬空指针(str
)和字符串文字("a"
)。