c++ - 您可以在对象的生命周期开始之前创建对对象的引用,然后在没有未定义行为的情况下稍后使用它吗?
问题描述
考虑以下代码:
aligned_storage<sizeof(T)> buffer;
T& ref(*reinterpret_cast<T*>(&buffer));
new (&buffer) T();
Use(ref);
这样做的上下文是将一些全局对象重构为显式初始化的对象(而不是在静态初始化期间由编译器初始化),而不影响现有用户(并且不使用宏)。
我认为代码会导致未定义的行为,但是是否有任何有效的(可移植的)方式来完成同样的事情?我能想到的最接近的事情是使用某种类型 with operator T&
,但这仍然可能会破坏用户。
解决方案
推荐阅读
- node.js - AWS lambda 函数可以在一次运行中接收多个请求吗?
- solr - SOLR8.4.0 - SolrWriter 警告“创建文档时出错”,但没有关于原因的信息
- laravel - Laravel 自定义请求验证不起作用
- c - 如何使用键盘在终端输入中正确插入换行符('\n')?
- excel - 如何根据列标题和工作表名称之间的匹配将数据列复制到另一个工作表中?
- r - 将具有相同值的行组合在一列中并找到这些行的平均值
- domain-driven-design - DDD:使用应用程序服务的基础设施而不在域中创建抽象?
- c# - 正则表达式 - C# 替换 SQL 通配符
- excel - 如何在 VBA 中忽略以 2 个字母开头的文件
- tableau-api - 按年份百分比差异对 Tableau 条形字符排序前 5