Синглтон C++

В игре Source SDK
Забаненный
Статус
Оффлайн
Регистрация
10 Янв 2017
Сообщения
2,148
Реакции[?]
806
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Коротенький гайд посвящённый
синглотонам.

Синглтон позволяет создать единственную сущность
одного типа.

Опишем класс - синглтон.
CSettingsClass.h
Код:
#include <Windows.h>
class CSettingsClass {
private:
    CSettingsClass() { }
    ~CSettingsClass() { }
public:
    
    static CSettingsClass*getInstance() {
        static CSettingsClass singl;
        return &singl;
    }
//полезная нагрузка
    void Method();
    void Method1();
};

CSettingsClass.cpp
Код:
#include "CSettingsClass.h"

void CSettingsClass::Method(){
printf_s("Method() was called");
}

void CSettingsClass::Method1()
{
}
Использование​
Код:
#include "CSettingsClass.h"
int main(){
CSettingsClass::GetInstance()->Method();
return 0L;
}
Такую реализацию удобно использовать для
класса настроек.​
 
Эксперт
Статус
Оффлайн
Регистрация
12 Июн 2014
Сообщения
991
Реакции[?]
1,209
Поинты[?]
3K
это немного не то, что ты в заголовке указал))
Singleton обычно используют для разруливания создания объектов на старте. Получается своеобразная обвязка для создания объекта класса.
Код:
template <typename T>
    class Singleton
    {
public:
    static T* Instance()
    {
        if (nullptr == m_object)
            m_object = new Singleton(); 
        return m_object;
    }
 
    static void Release()
    {
        if (nullptr != m_object)
        {
            delete m_object;
            m_object = nullptr;
        }
    }
 
private:
    Singleton() {}
    virtual ~Singleton() {}
    Singleton(const Singleton&) { }
 
    Singleton& operator=(const Singleton&) { return *this; }
 
    static Singleton* m_object;
};
 
Singleton* Singleton::m_object = nullptr;


class YouClass : public Singleton<YouClass>
{
        friend class Singleton<YouClass>;
    public:   
    YouClass();
    void Test()
    {
        std::cout << "Singleton::Test" <<std::endl;
    }
};

//Get
auto m_ptr = YouClass::Instance();
     m_ptr->Test();
так как-то)
 
Участник
Статус
Оффлайн
Регистрация
30 Май 2017
Сообщения
670
Реакции[?]
155
Поинты[?]
0
это немного не то, что ты в заголовке указал))
Singleton обычно используют для разруливания создания объектов на старте. Получается своеобразная обвязка для создания объекта класса.
Код:
template <typename T>
    class Singleton
    {
public:
    static T* Instance()
    {
        if (nullptr == m_object)
            m_object = new Singleton();
        return m_object;
    }
 
    static void Release()
    {
        if (nullptr != m_object)
        {
            delete m_object;
            m_object = nullptr;
        }
    }
 
private:
    Singleton() {}
    virtual ~Singleton() {}
    Singleton(const Singleton&) { }
 
    Singleton& operator=(const Singleton&) { return *this; }
 
    static Singleton* m_object;
};
 
Singleton* Singleton::m_object = nullptr;


class YouClass : public Singleton<YouClass>
{
        friend class Singleton<YouClass>;
    public:  
    YouClass();
    void Test()
    {
        std::cout << "Singleton::Test" <<std::endl;
    }
};

//Get
auto m_ptr = YouClass::Instance();
     m_ptr->Test();
так как-то)
Ты специально каждый его коммент исправляешь ? :CoolStoryBob:
 
В игре Source SDK
Забаненный
Статус
Оффлайн
Регистрация
10 Янв 2017
Сообщения
2,148
Реакции[?]
806
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Ты специально каждый его коммент исправляешь ? :CoolStoryBob:
Я учусь на этом. Бывает то что я не знаю спрашиваю у него.
 
это немного не то, что ты в заголовке указал))
Singleton обычно используют для разруливания создания объектов на старте. Получается своеобразная обвязка для создания объекта класса.
Код:
template <typename T>
    class Singleton
    {
public:
    static T* Instance()
    {
        if (nullptr == m_object)
            m_object = new Singleton();
        return m_object;
    }
 
    static void Release()
    {
        if (nullptr != m_object)
        {
            delete m_object;
            m_object = nullptr;
        }
    }
 
private:
    Singleton() {}
    virtual ~Singleton() {}
    Singleton(const Singleton&) { }
 
    Singleton& operator=(const Singleton&) { return *this; }
 
    static Singleton* m_object;
};
 
Singleton* Singleton::m_object = nullptr;


class YouClass : public Singleton<YouClass>
{
        friend class Singleton<YouClass>;
    public:  
    YouClass();
    void Test()
    {
        std::cout << "Singleton::Test" <<std::endl;
    }
};

//Get
auto m_ptr = YouClass::Instance();
     m_ptr->Test();
так как-то)
Я не понял по поводу виртуального дескриптора
 
alive forever
Забаненный
Статус
Оффлайн
Регистрация
21 Июн 2017
Сообщения
663
Реакции[?]
400
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Коротенький гайд посвящённый
синглотонам.

Синглтон позволяет создать единственную сущность
одного типа.

Опишем класс - синглтон.
CSettingsClass.h
Код:
#include <Windows.h>
class CSettingsClass {
private:
    CSettingsClass() { }
    ~CSettingsClass() { }
public:
   
    static CSettingsClass*getInstance() {
        static CSettingsClass singl;
        return &singl;
    }
//полезная нагрузка
    void Method();
    void Method1();
};

CSettingsClass.cpp
Код:
#include "CSettingsClass.h"

void CSettingsClass::Method(){
printf_s("Method() was called");
}

void CSettingsClass::Method1()
{
}
Использование​
Код:
#include "CSettingsClass.h"
int main(){
CSettingsClass::GetInstance()->Method();
return 0L;
}
Такую реализацию удобно использовать для
класса настроек.​
Рассказал бы еще чем полезен синглтон и в каких случаях его удобно юзать)
 
В игре Source SDK
Забаненный
Статус
Оффлайн
Регистрация
10 Янв 2017
Сообщения
2,148
Реакции[?]
806
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
alive forever
Забаненный
Статус
Оффлайн
Регистрация
21 Июн 2017
Сообщения
663
Реакции[?]
400
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Участник
Статус
Оффлайн
Регистрация
15 Апр 2017
Сообщения
396
Реакции[?]
194
Поинты[?]
0
Эксперт
Статус
Оффлайн
Регистрация
12 Июн 2014
Сообщения
991
Реакции[?]
1,209
Поинты[?]
3K
в чем смысл так писать ?
смысл в привычке, хотя на конечный результат это не влияет) Компилятор все равно сведет все к одному.
смотришь на начало строки и ожидаешь увидеть там что то полезное, а там nullptr.
надо на всю строку смотреть)))
 
Сверху Снизу