簡體   English   中英

const class 可以延長臨時的 const 成員 ref 的壽命嗎?

[英]const class can extend lifetime of const member ref of temporary?

struct  A {

// something

~A() { std::cout <<  "A destruct!\n"; }

};

class  refWrapper {

public:

refWrapper(const  A&  a) : a_(a) {}

~refWrapper() { std::cout <<  "refWrapper destruct!\n"; }

private:

const A& a_;

};

void  func(const  refWrapper&  ref  =  A()) {

// why ~A after ~refWrapper

// Rather than after refWrapper constructor complete

}

使用默認 arguments,調用

func();

相當於

func(A()); // so func(refWrapper(A()));

所以,

  • 首先創建臨時A (在完整表達式結束時銷毀)
  • 第二次創建臨時refWrapper (綁定到參數引用)
  • 臨時refWrapper被破壞。
  • 臨時A被毀。

請注意,生命周期延長或參數有一個例外

臨時 object 綁定到 function 調用 ([expr.call]) 中的引用參數,直到包含調用的完整表達式完成。

因此refWrapper在完整表達式結束時被銷毀,而不是在func調用結束時被銷毀(盡管在給定示例中是同一時刻)。 因此,銷毀應該按照與構建相反的順序進行。

暫無
暫無

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

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