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はシングルトンです。これを美化されたグローバルと呼ぶ人もいます。よくある悪用パターン。プライベート ctor と public static アクセサーを使用します。

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