Исключение конструктора C ++ - PullRequest
2 голосов
/ 17 апреля 2010

Кажется, я не понимаю, как перехватить конструктор исключений.Вот соответствующий код:

     struct Thread {
            rysq::cuda::Fock fock_;
            template<class iterator>
            Thread(const rysq::cuda::Centers &centers,
                   const iterator (&blocks)[4])
                : fock_()
            {
                if (!fock_) throw;
           }
      };

      Thread *ct;
      try { ct = new Thread(centers_, blocks); }
      catch(...) { return false; } // catch never happens,

Так что оператор catch не выполняется, и я получаю необработанное исключение.Что я сделал не так?это прямой C ++ с использованием g ++.

Ответы [ 3 ]

8 голосов
/ 17 апреля 2010

Вы должны бросить объект, например,

throw std::exception();

throw без операнда используется только внутри блока catch для переброса исключения, обрабатываемого блоком catch.

3 голосов
/ 17 апреля 2010

Вам нужно что-то бросить. throw само по себе означает «перебросить» текущее исключение. Если текущего исключения нет, вызывается unexpected, что, вероятно, прервет вашу программу.

Лучше всего выбрать класс из <stdexcept>, который описывает проблему. logic_error или производная для обозначения ошибок программирования, или runtime_error для обозначения исключительных условий.

3 голосов
/ 17 апреля 2010

Вы должны бросить что-то, чтобы поймать что-либо.

Попробуйте изменить строку

if (!fock_) throw;

до

if (!fock_) throw "";

и наблюдайте разницу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...