c++ - 绑定到 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} }
?
解决方案
完整表达式是S* p = new S{ 1, {2,3} }
。
推荐阅读
- asp.net-core - 在 Blazor 中重定向到 HTTPS
- git - 将 git 历史记录转储为单个文件?
- bitcoin - org.bitcoinj.core.AddressFormatException:将 66 个字符长的私钥转换为 ECKey 时,位置 0 处的非法字符 0
- c# - 尝试从另一个 wcf 服务使用 wcf 服务时收到 400 Bad Request
- moqui - Moqui 和 GDPR 的删除权要求
- php - php/mysql - 比较 2 个表中的多个列并显示最大差异
- angular - 如何使用正确的标头使用 Angular 6 发送 OAuth2 POST 请求?
- sql - 在不同 Schema 的表之间迁移/同步数据
- node.js - 使用 node.js 在 mongo db 中发布带有用户详细信息的数据
- php - 在android中使用php将图像上传到mySQL服务器