gpt4 book ai didi

c++ - 如何创建一个 Lazy C++ 模板类来处理没有默认构造函数的类型?

转载 作者:行者123 更新时间:2023-11-30 02:53:47 24 4
gpt4 key购买 nike

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

How to abstract lazy initialization in C++?

简而言之,代码使用放置新/删除。参见 http://en.wikipedia.org/wiki/Placement_syntax详情...

最佳答案

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

如果你真的想用你自己的方式实现它 - 然后从 boost::optional<T> 窃取一些实现细节.

一个提示是这个提升类使用 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
};

关于c++ - 如何创建一个 Lazy C++ 模板类来处理没有默认构造函数的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17632944/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com