gpt4 book ai didi

c++ - 异常未在 try catch block 中捕获

转载 作者:太空狗 更新时间:2023-10-29 19:45:39 25 4
gpt4 key购买 nike

我做了一个简单的throw "TEST THROW" 并且它没有被我的catch (std::exception& e) 捕获。是不是因为我正在捕获 std::exception&e?我的意思是,是否只捕获了从 std::exception 派生的异常类?如果不是,我是做错了什么还是正常的?顺便说一下,这两个 catch block 都没有捕获到 throw 异常。

int main()
{
try
{
throw "TEST THROW"; // TEST
Core core;

core.Init();
core.Load();

while (!core.requestCloseWindow)
{
core.HandleInput();

core.Update();
core.Draw();
}

core.Unload();
core.window->close();
}
catch (std::exception& e)
{
std::cerr << e.what() << std::endl;
try
{
time_t rawTime;
struct tm* timeInfo;
char timeBuffer [80];

time(&rawTime);
timeInfo = localtime(&rawTime);

strftime(timeBuffer, 80, "%F %T", timeInfo);
puts(timeBuffer);

std::ofstream ofs; // Pas besoin de close, car le destructeur le fait.
ofs.exceptions(std::ofstream::failbit | std::ofstream::badbit);
ofs.open("log.txt", std::ofstream::out | std::ofstream::app);
ofs << e.what() << std::endl;
}
catch (std::exception& e)
{
std::cerr << "An error occured while writing to a log file!" << std::endl;
}
}

return 0;

最佳答案

人们可能遇到此问题的另一个原因是他们可能会抛出指向异常的指针

/* WARNING WARNING THIS CODE IS WRONG DO NOT COPY */
try {
throw new std::runtime_error("catch me");
} catch (std::runtime_error &err) {
std::cerr << "exception caught and ignored: " << err.what() << std::end;
}
/* WARNING WARNING THIS CODE IS WRONG DO NOT COPY */

不会捕获您抛出的std::runtime_error*。对于未捕获的异常,它可能会因调用 std::terminate 而终止。

不要使用 new 分配异常,只需按值抛出构造函数,例如

try {
/* note: no 'new' here */
throw std::runtime_error("catch me");
} catch (std::runtime_error &err) {
std::cerr << "exception caught and ignored: " << err.what() << std::end;
}

关于c++ - 异常未在 try catch block 中捕获,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30560422/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com