【问题标题】:What is the lifetime of a temporary object bound to a reference in a new-initializer?绑定到 new-initializer 中的引用的临时对象的生命周期是多少?
【发布时间】:2021-11-03 12:02:06
【问题描述】:

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

(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

——结束示例]

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

【问题讨论】:

  • 完整表达式为S* p = new S{ 1, {2,3} }
  • @Jarod42 谢谢,您想发布答案吗?

标签: c++ reference new-operator object-lifetime temporary-objects


【解决方案1】:

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

【讨论】:

  • 更专业一点,这不是一个表达式,但这里的完整表达式确实包括p 的初始化([intro.execution]/5)。并不是说初始化部分对对象生命周期很重要。
猜你喜欢
  • 2012-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-15
  • 2012-09-22
相关资源
最近更新 更多