У меня есть синглтон со следующей структурой:
// 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
используют mInstance
в своих целях в ctor.
Проблема в том, как использовать this
с boost::scoped_ptr
?В случае shared_ptr
есть класс enable_shared_from_this
от boost, который позволяет получить то, что мне нужно.Но что делать в моем случае?