相关疑难解决方法(0)

我应该继承std :: exception吗?

我已经看到至少一个可靠的源(我采用的C++类)建议C++中特定于应用程序的异常类应该继承std::exception.我不清楚这种方法的好处.

在C#中,继承的原因ApplicationException很明确:你得到了一些有用的方法,属性和构造函数,只需要添加或覆盖你需要的东西.有了std::exception这一切似乎你得到的是一个what()覆盖方法,你也可以同样创造自己.

那么,如果有的话,std::exception作为特定于应用程序的异常类的基类有什么好处呢?有没有好的理由不继承std::exception

c++ exception-handling exception

96
推荐指数
9
解决办法
3万
查看次数

通过引用捕获异常危险吗?

请查看以下异常抛出和捕获:

void some_function() {
    throw std::exception("some error message");
}

int main(int argc, char **argv) {
    try {
        some_function();
    } catch (const std::exception& e) {
        std::cerr << e.what() << std::endl;
        exit(1);
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

通过引用捕获抛出的异常是否安全?

我担心的是因为异常e实际上是放在堆栈上some_function().但some_function()刚刚回来,导致e被破坏.所以实际上现在e指向一个被破坏的对象.

我的担忧是否正确?

传递异常而不按值复制它的正确方法是什么?我应该抛出new std::exception()它放在动态内存中吗?

c++ exception

63
推荐指数
4
解决办法
4857
查看次数

在C++中创建自定义异常

我正在学习C++,当我尝试创建自己的异常并将它们放在Linux上时,我遇到了这种情况.

我已经创建了一个小测试项目来测试我的实现,下面是我的异常类头文件.

class TestClass : public std::runtime_error
{
public:
    TestClass(char const* const message) throw();
    virtual char const* what() const throw();
};
Run Code Online (Sandbox Code Playgroud)

异常类的源文件是

using namespace std;

TestClass::TestClass(char const* const message) throw()
    : std::runtime_error(message)
{

}

char const * TestClass::what() const throw()
{
    return exception::what();
}
Run Code Online (Sandbox Code Playgroud)

在我的主应用程序中,我正在调用一个抛出异常并在try/catch中捕获它的函数,如下所示:

void runAFunctionAndthrow();

/*
 * 
 */
int main(int argc, char** argv) {
    try
    {
        cout << "About to call function" << endl;
        runAFunctionAndthrow();
    }
    catch (TestClass ex)
    {
        cout << "Exception Caught: " << ex.what() << …
Run Code Online (Sandbox Code Playgroud)

c++ exception

24
推荐指数
2
解决办法
3万
查看次数

标签 统计

c++ ×3

exception ×3

exception-handling ×1