首页 > 解决方案 > 绑定到 new-initializer 中的引用的临时对象的生命周期是多少?

问题描述

来自工作草案的[class.temporary], C++ 编程语言标准:

(6.12) — 临时绑定到new-initializer ([expr.new]) 中的引用,直到包含new-initializer的完整表达式完成为止。

[注7:这可能会引入一个悬空引用。——尾注]

[示例 5:

struct S { int mi; const std::pair<int,int>& mp; };
S a { 1, {2,3} };
S* p = new S{ 1, {2,3} };       // creates dangling reference

结束示例]

这是否意味着{2,3}绑定到 的引用成员mp的临时对象会S持续到表达式的求值new S { 1, {2,3} },或者直到表达式的求值S* p = new S{ 1, {2,3} }

标签: c++referencenew-operatorobject-lifetimetemporary-objects

解决方案


完整表达式是S* p = new S{ 1, {2,3} }


推荐阅读