4

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

//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()
{
  //...
}
4

1 回答 1

4

MyClass是一个单身人士——有人称其为荣耀的全球。一种经常被滥用的模式。使用私有 ctors 和公共静态访问器:

 MyClass {
       public:
            static MyClass& Instance() {
                 static MyClass obj;
                 return obj;
            }
       // ...
       private:
            MyClass() : m_handle(pimpl()), initialized(true) {}
       // ...
 };
于 2010-02-23T23:11:24.427 回答