我有一个具有以下结构的单身人士:
// Hpp
class Root : public boost::noncopyable
{
public:
~Root();
static Root &Get();
void Initialize();
void Deinitialize();
private:
Root(); // Private for singleton purposes
static boost::scoped_ptr<Root> mInstance;
Manager1 *mManager1;
Manager2 *mManager2;
};
// Cpp
boost::scoped_ptr<Root> Root::mInstance;
Root::Root()
{
// [!!!]
mInstance = this;
// Managers are using `mInstance` in their constructors
mManager1 = new Manager1();
mManager2 = new Manager2();
mInstance->Initialize();
}
Root::~Root() { delete mManager1; delete mManager2; }
Root &Root::Get()
{
if (mInstance == nullptr) mInstance = boost::scoped_ptr<Root>(new Root());
return *mInstance;
}
这个想法是在程序存在时自动删除实例。查看标记为[!!!]
的行:mInstance = this
。我必须这样做是因为mManager1
和mManager2
在ctor中使用mInstance
。
问题是如何将this
与boost::scoped_ptr
一起使用?在shared_ptr
案例中,来自boost的enable_shared_from_this
类允许获得我需要的内容。但在我的情况下该怎么做?
答案 0 :(得分:1)
您可以让构造函数将Root
作为参数,然后将this
传递给它们:
Root::Root() {
mManager1 = new Manager1(this);
mManager2 = new Manager2(this);
Initialize();
}
这样做的另一个好处是你不会秘密地将其他类与单身人员联系起来。