[英]Will temporary object be deleted if there is no const reference to it?
讓我們看一下這兩個功能:
std::string get_string()
{
std::string ret_value;
// Calculate ret_value ...
return ret_value;
}
void process_c_string(const char* s)
{
std::cout << s << endl;
}
這是帶有get_string
返回的參數的process_c_string
兩個可能的調用。
不綁定const引用get_string
的返回對象。
process_c_string(get_string().c_str());
使用綁定const引用get_string
返回的對象。
const std::string& tmp_str = get_string(); process_c_string(tmp_str.c_str());
我知道第二種方法是有效的,但是第一種方法又如何呢? 由於沒有const reference
, get_string
返回的臨時對象會在process_c_str
完成之前被刪除嗎?
注意:這兩個版本在MSVC中都可以。
臨時項的生存期延長到創建該臨時項的完整表達式的長度。 就您而言,臨時文件將被銷毀,但僅在對process_c_string
的調用完成后才可銷毀。 只要該函數不存儲指針供以后使用,就可以了。
在第二種情況下(引用的綁定),該臨時項的生存期被擴展為引用的范圍,但是在這種特殊情況下,我建議您不要使用該模式。 通過創建一個用臨時變量初始化的本地字符串,您可以獲得相同的效果,並且代碼更簡單。 (從性能的角度來看,所有編譯器都忽略了代碼中潛在的額外副本,因此代價是相同的)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.