我有一个相当基本的C++的问题,可以考虑一个函数,需要一些输入参数,并创建一个std::string
从类似下面的这些参数:C++返回临时对象混乱
std::string constructString(int some_parameter) {
std::stringstream ss;
// Construct a string (arbitrarily complex)
ss << "Some parameter is " << some_parameter << " right now";
return ss.str(); //Am I not returning a temporary object here?
}
据我所知,当函数返回时,stringstream-object将超出范围,但是不会使构造的字符串无效?
如果我将返回类型更改为const char *
并返回ss.str().c_str()
,会发生什么情况?
像上面的代码似乎工作,但我怀疑这只是因为包含'临时'对象的内存还没有被别的东西覆盖时,我使用它?我不得不承认,如果有人能够解释这整个“临时对象” - 对我来说(或者只是指向正确的方向),我不得不承认,在这种情况下我会感到困惑。
THX提前
调用constructString的函数不会拾取此副本后调用的析构函数吗?由于它是临时对象,因此我假定它的指针保存在堆栈上作为返回值。返回后会发生什么?如果没有新的对象所有者,它会被销毁吗?编译器如何知道该对象在返回后是否必须销毁? –