代码之家  ›  专栏  ›  技术社区  ›  Bwmat

你能在对象的生命周期开始之前创建一个对它的引用,然后在没有未定义行为的情况下使用它吗?

  •  5
  • Bwmat  · 技术社区  · 7 年前

    考虑以下代码:

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

    我认为代码会导致未定义的行为,但是有没有有效的(可移植的)方法来完成同样的事情呢?我能想到的最贴切的方法就是用某种类型 operator T& ,但这仍可能让用户崩溃。

    0 回复  |  直到 7 年前