首页 > 解决方案 > std::rethrow(std::exception_ptr) 不工作

问题描述

在 JAVA 之后,我不得不处理 C++。最简单的例子,但它对我不起作用:

#include <iostream>

void handle_exceptions(std::exception_ptr e);

   std::exception_ptr e;   

int main()
{


    try {
        throw new std::exception("test");
    }
    catch (...) {
        e = std::current_exception();
        handle_exceptions(e);
    }
} // END: main

void handle_exceptions(std::exception_ptr e)
{

    try {

        if (e) { std::rethrow_exception(e); }

    }
    catch (const std::exception & e) {

        std::cerr << std::endl << e.what();
        std::exit(0);
    }
} // END: handle_exception()

std::rethrow 行生成未处理的异常: Возникло необработанное исключение по адресу 0x766A08B2 в ConsoleApplication1.exe: исключение Microsoft C++: std::exception по адресу памяти 0x00B

可能的 std::exception_ptr 不为 NULL。错误的内存访问,但为什么?

标签: c++pointersexception

解决方案


改变

throw new std::exception("test");

throw std::exception("test");

顺便说一句,在我的情况下,带有“test”作为参数传递的 std::exception("test") 不能用 g++ 编译。


推荐阅读