簡體   English   中英

如果沒有const引用,是否會刪除臨時對象?

[英]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兩個可能的調用。

  1. 不綁定const引用get_string的返回對象。

     process_c_string(get_string().c_str()); 
  2. 使用綁定const引用get_string返回的對象。

     const std::string& tmp_str = get_string(); process_c_string(tmp_str.c_str()); 

我知道第二種方法是有效的,但是第一種方法又如何呢? 由於沒有const referenceget_string返回的臨時對象會在process_c_str完成之前被刪除嗎?

注意:這兩個版本在MSVC中都可以。

臨時項的生存期延長到創建該臨時項的完整表達式的長度。 就您而言,臨時文件將被銷毀,但僅在對process_c_string的調用完成后才可銷毀。 只要該函數不存儲指針供以后使用,就可以了。

在第二種情況下(引用的綁定),該臨時項的生存期被擴展為引用的范圍,但是在這種特殊情況下,我建議您不要使用該模式。 通過創建一個用臨時變量初始化的本地字符串,您可以獲得相同的效果,並且代碼更簡單。 (從性能的角度來看,所有編譯器都忽略了代碼中潛在的額外副本,因此代價是相同的)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM