На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Qraizer, Hsilgos
Страницы: (3) 1 2 [3]  все  ( Перейти к последнему сообщению )  
> Инкапсуляция глобальных переменных
    Цитата Wound @
    метод Cleanup - ни к селу ни к городу.

    A добавлю в описалово noexcept - только попробуй выбросить необработанное исключение :lol:

    Цитата Wound @
    Твой код не удовлетворяет RAII

    В каком месте кода?
      Цитата JoeUser @
      A добавлю в описалово noexcept - только попробуй выбросить необработанное исключение :lol:

      В Init тоже добавишь?

      Цитата JoeUser @
      В каком месте кода?

      Везде. Вот например, лови:
      ExpandedWrap disabled
        template<typename T>
        struct Holder {
           Holder() {
              std::cout << "Holder()::Holder()" << std::endl;
              if (!Self)  Self = new T();
              Self->Init();
           }
           ~Holder() {
              if (Self) {
                 Self->Cleanup();
                 delete Self;
                 std::cout << "~Holder()::Holder()" << std::endl;
              }
           }
           T* Self = nullptr;
        };
         
         
        ////////////////////////////////////////////////////////////////////////////////////////
         
        template <typename T>
        class Singleton {
        public:
           static T* Instance() {
              std::cout << "Singlton::Instance()" << std::endl;
              static Holder<T> Dummy;
              return Dummy.Self;
           }
        private:
           Singleton() = delete;
           Singleton(Singleton const&) = delete;
           Singleton& operator= (Singleton const&) = delete;
           Singleton(Singleton const&&) = delete;
           Singleton& operator= (Singleton const&&) = delete;
        };
         
        class SomeClass
        {
        public:
           void Init()
           {
              connect();
              initialize();
           }
         
           void Cleanup()
           {
              disconnect();
           }
         
           void connect()
           {
              std::cout << "connect" << std::endl;
           }
         
           void disconnect()
           {
              std::cout << "disconnect" << std::endl;
           }
         
           void initialize()
           {
              std::cout << "initialize" << std::endl;
              throw "Aaaaaaaaaaaaaaaaa";
           }
           int member;
        };
         
        int main()
        {
           {
              auto pInst = Singleton<SomeClass>::Instance();
              pInst->member = 10;
              std::cout << pInst->member << std::endl;
           }
           auto pInst = Singleton<SomeClass>::Instance();
           pInst->member = 20;
         
           return 0;
        }


      Добавлено
      Вот:
      https://ideone.com/8l75us
      Потерял ресурс, выхватил дедлок, не закрыл соединение, получил мемори лик...
      Сообщение отредактировано: Wound -
        Цитата Wound @
        Во, попробовал поиграться с твоим кодом, выхватил по щам в рантайме:

        Ваще ниче не понял в твоей задумке! Но это жесть ... Я бы еще разделил на нуль для надежности !!! :blink:

        Добавлено
        Цитата Wound @
        В Init тоже добавишь?

        Надо и в Инит добавлять 8-)
          Цитата JoeUser @
          Ваще ниче не понял в твоей задумке! Но это жесть ... Я бы еще разделил на нуль для надежности !!! :blink:

          Ну ты из синглтона возвратил указатель на класс, я же могу его передать куда нибудь дальше в функцию?
          Например, что мешает мне написать вот так:
          ExpandedWrap disabled
            void SomeFunction(std::unique_ptr<SomeClass>&& obj)
            {
             
            }
             
            int main()
            {
                 std::unique_ptr<SomeClass> pObj(Singleton<SomeClass>::Instance());
                 SomeFunction(std::move(pObj));
            }

          ?? И выхватить исключение?

          Цитата JoeUser @
          Надо и в Инит добавлять 8-)

          А зачем? В конструкторах что исключения плохо бросать? :huh: А если мне нужно кинуть в Init исключение? Что мне делать то?
            Ребят, вы в Холивары не хотите переехать? Бо как ТС спросил вас, как ему сложить три сущности, а вы втираете ему про алгебру Ли и разбираете разницы гомоморфизмов своих разных методов сложения.
              Ну можно и в холивары, я не против.
                Скрытый текст
                Цитата Qraizer @
                Ребят, вы в Холивары не хотите переехать?

                Цитата Wound @
                Ну можно и в холивары, я не против.

                Не, я пожалуй пойду выпью чаю и съем еще французских булочек 8-) Киля - победил.
                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                0 пользователей:
                Страницы: (3) 1 2 [3]  все


                Рейтинг@Mail.ru
                [ Script execution time: 0,0319 ]   [ 17 queries used ]   [ Generated: 29.03.24, 14:57 GMT ]