2016-01-28 4 views
0

Я пытаюсь поймать исключение, которое бросается из конструктора объекта, который находится в процессе создания и передается в конструктор std::unique_ptr ,C++ 11 исключение исключения из конструктора при создании unique_ptr

Однако я не могу поймать фактическое исключение и вместо этого должен полагаться на оператор ..., чтобы поймать исключение.

Я использую Microsoft Visual C++ 2015.

не Умею ловить исключения, когда они выбрасываются из конструктора?

Вот мой код:

#include <memory> 
#include <exception> 
#include <iostream> 

class Test 
{ 
public: 
    Test() 
    { 
     throw new std::exception("this is a test"); 
    } 
}; 

int main() 
{ 
    try 
    { 
     auto test = std::unique_ptr<Test>(new Test()); 
    } 
    catch (const std::exception& e) 
    { 
     std::cout << "I am here" << std::endl; 
    } 
    catch (...) 
    { 
     std::cout << "I am here 2" << std::endl; 
    } 

    return 0; 
} 

Выход я вижу I am here 2.

ответ

1

Хорошо, посмотрев на мой вопрос в течение минуты, я понял, что создаю объект std::exception с оператором new.

После удаления оператора new он работает должным образом.

+1

Ex Javite? Лучше просто забыть о новых возможностях как можно больше. Вы даже должны избегать использования new для создания unique_ptr, используйте make_unique (если вы не можете использовать C++ 14, вы можете легко выполнить его резервное копирование). –