gpt4 book ai didi

c++ - 与类成员变量一起使用的 Pimpl 习语

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:58:16 25 4
gpt4 key购买 nike

实现这个类的正确方法是什么?

//Header
#include <boost/shared_ptr.hh>

class MyClass
{
public:

static foo()
static foobar();

private:
class pimpl;
static boost::shared_ptr<pimpl> m_handle;
static bool initialized;
};


//source
namespace
{
bool init()
{
//...
// init() can't access m_handle, unless it is a friend of MyClass
// but that seems a bit "tacky", is there a better way?
}
}


class MyClass::pimpl
{
public:
~pimpl(){}
}


bool MyClass::initialized = init();

MyClass::foo()
{
//...
}

MyClass::foobar()
{
//...
}

最佳答案

MyClass 是一个单例——有人称它为美化的全局。一种经常被滥用的模式。使用私有(private) ctors 和公共(public)静态访问器:

 MyClass {
public:
static MyClass& Instance() {
static MyClass obj;
return obj;
}
// ...
private:
MyClass() : m_handle(pimpl()), initialized(true) {}
// ...
};

关于c++ - 与类成员变量一起使用的 Pimpl 习语,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2322446/

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