代码之家  ›  专栏  ›  技术社区  ›  CorellianAle

无法捕获“catch”中的STD:

  •  2
  • CorellianAle  · 技术社区  · 6 年前

    我有以下代码:

    void App::start()
    try
    {
        initialize();
        //...
    
        m_errorCode = 0;
    }
    catch (const std::exception &ex)
    {
        std::cerr << ex.what() << '\n';
        m_errorCode = -1;
    }
    catch (...)
    {
        std::cerr << "Unknown exception\n";
        m_errorCode = -2;
    }
    
    void App::initialize()
    {
        m_controller = createController();
        //...
    }
    
    std::unique_ptr<IController> App::createController() const
    {
        if (m_config.m_controllerType == "iot_v1")
        {
            return std::make_unique<ControllerIotV1>();
        }
    
        if (m_config.m_controllerType == "iot_v2")
        {
            return std::make_unique<ControllerIotV2>();
        }
    
        throw new std::invalid_argument("Unsupported controller type.");
    }
    

    我抓不到 std::invalid_argument catch (const std::exception &ex) 阻止。这个 catch(...) 正在触发块。但据我所知, STD:无效的参数 继承自 std::exception 并且应该可以被第一个块捕获。它是?我觉得我错过了一些明显的东西。

    1 回复  |  直到 6 年前
        1
  •  2
  •   Jarod42    6 年前

    你应该按价值抛掷(没有 new ):

    throw std::invalid_argument("Unsupported controller type.");