[英]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.