删除此问题以支持以下内容;现在处理没有默认构造函数的类的答案:
简而言之,代码使用放置新/删除。有关详细信息,请参阅http ://en.wikipedia.org/wiki/Placement_syntax ...
删除此问题以支持以下内容;现在处理没有默认构造函数的类的答案:
简而言之,代码使用放置新/删除。有关详细信息,请参阅http ://en.wikipedia.org/wiki/Placement_syntax ...
只需使用boost::optional<T>
而不是成对的成员m_bInitialized
和m_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
};