1

删除此问题以支持以下内容;现在处理没有默认构造函数的类的答案:

如何在 C++ 中抽象延迟初始化?

简而言之,代码使用放置新/删除。有关详细信息,请参阅http ://en.wikipedia.org/wiki/Placement_syntax ...

4

1 回答 1

3

只需使用boost::optional<T>而不是成对的成员m_bInitializedm_value. 也许你可以只使用boost::optional<T>而不是你的template class Lazy......

如果您真的想以自己的方式实现它 -然后boost::optional<T>.

一个提示是这个 boost 类使用placement new

class Lazy {
public:
   bool is_init() const { return m_memberPtr != nullptr; }
   T& force() 
   { 
      if (!is_init()) 
        m_memberPtr = new (m_memberMemory) T(m_initializer());
      return *m_memberPtr;
   }
private:
  T* m_memberPtr;
  alignas(T) char m_memberMemory[sizeof(T)]; // s
};
于 2013-07-13T18:43:29.890 回答