首页 > 解决方案 > 您可以在对象的生命周期开始之前创建对对象的引用,然后在没有未定义行为的情况下稍后使用它吗?

问题描述

考虑以下代码:

aligned_storage<sizeof(T)> buffer;
T& ref(*reinterpret_cast<T*>(&buffer));
new (&buffer) T();
Use(ref);

这样做的上下文是将一些全局对象重构为显式初始化的对象(而不是在静态初始化期间由编译器初始化),而不影响现有用户(并且不使用宏)。

我认为代码会导致未定义的行为,但是是否有任何有效的(可移植的)方式来完成同样的事情?我能想到的最接近的事情是使用某种类型 with operator T&,但这仍然可能会破坏用户。

标签: c++c++03

解决方案


推荐阅读