Я знаю, как реализовать синглтон с использованием идиомы изящного счетчика , но мне интересно, можно ли считать такую же реализацию, использующую shared_ptr
+ weak_ptr
, как одну. Вот оно:
struct foo
{
foo &operator=(const foo &) = delete;
foo(const foo &) = delete;
static shared_ptr<foo> get_instance()
{
static std::weak_ptr<foo> weak_instance;
std::shared_ptr<foo> instance = weak_instance.lock();
if (!instance) {
instance.reset(new foo());
weak_instance = instance;
}
return instance;
}
private:
foo() {}
};
Единственный экземпляр foo
будет удален, как только его последний shared_ptr
будет уничтожен.
Можно ли это считать примером одиночного использования идиома изящного счетчика или это просто похоже на него?