Мы знаем, что Meyers Singleton является поточно-ориентированным с c ++ 11.
Я использую этот шаблон синглтона.
struct singleton_t
{
static
singleton_t &
instance()
{
static singleton_t s;
return s;
} // instance
singleton_t(const singleton_t &) = delete;
singleton_t & operator = (const singleton_t &) = delete;
private:
singleton_t() {}
~singleton_t() {}
}; // struct singleton_t
singleton_t не является указателем или ссылкой, поэтому полиморфизм не применяется.
Теперь я хочу сделать это примерно так:
struct singleton_t
{
static
singleton_t *
instance(singleton_t* p = nullptr)
{
static singleton_t *s = nullptr == p ? new singleton_t : p;
return s;
} // instance
singleton_t(const singleton_t &) = delete;
singleton_t & operator = (const singleton_t &) = delete;
private:
singleton_t() {}
~singleton_t() {}
}; // struct singleton_t
Таким образом, я singleton_t могу указать на экземпляр своего подкласса, чтобы полиморфизм мог быть достигнут. Или есть лучший подход?