温馨提示:本文翻译自stackoverflow.com,查看原文请点击:c++ - How many temporary objects are created in this initialization?
c++ temporary-objects

c++ - 在此初始化中创建了多少个临时对象?

发布于 2020-03-27 15:35:12

我有这个初始化:

const char* str = std::string("a").c_str();

在此初始化中创建了多少个临时对象?

可以"a"算是临时的。宾语?

我知道std::string("a")是临时工。宾语。

的结果c_str()是一个对象,str将其存储。所以这不是临时的。对象,对不对?

查看更多

查看更多

提问者
João Paulo
被浏览
11
NathanOliver 2019-04-26 20:32

"a"是type的字符串文字const char[2],因此它是一个对象。

std::string("a")是prvalue表达式,不是临时对象(尚未)。调用时c_str(),将实例化一个临时对象并对其进行调用c_str(),以获取指向临时对象数据的指针。

然后,您将指针的地址分配给,str因此现在str将指向临时对象数据的指针的地址保存。在该完整表达式的结尾,实体化的临时对象被破坏,从而使对该临时数据的迭代器/指针/引用无效。

这意味着str现在指向您不再拥有的内存,它被称为悬挂指针。除了为其分配其他地址之外,对其执行任何操作都是未定义的行为。

因此,当所有对象都结束时,您将拥有2个对象。悬空指针(str)和字符串文字("a")。