C ++在构造函数中捕获异常

用户名

在使用异常时,如何保护自己免受未完全创建的对象的侵害?我应该加入构造函数吗?还是不好的做法?如果我陷入困境,构造器对象将被创建。

#include <stdio.h>

class A
{
public:
    A()
    {
        try {
            throw "Something bad happened...";
        }
        catch(const char* e) {
            printf("Handled exception: %s\n", s);
        }
        // code continues here so our bad/broken object is created then?
    }
    ~A() 
    { 
        printf("A:~A()"); 
    }

    void Method()
    { // do something
    }
};

void main()
{
    A object; // constructor will throw... and catch, code continues after catch so basically we've got 
              // broken object.

    //And the question here: 
    //
    //* is it possible to check if this object exists without catching it from main? 
    // &object still gives me an address of this broken object so it's created but how can I protect myself 
    // from using this broken object without writing try/catch and using error codes?
    object.Method(); // something really bad. (aborting the program)

};
迈克·西摩

语言本身不具有对象以任何可检测的方式“无效”的概念。

如果异常指示无法创建有效对象,则不应在构造函数中对其进行处理;要么将其扔掉,要么就不要将其抓到。然后,程序将离开正在创建的对象的范围,并且将不可能错误地访问它。

如果由于某种原因这不是一个选择,那么您将需要用自己的方式将对象标记为“无效”。也许在构造函数的末尾设置一个布尔成员变量以指示成功。这很容易出错,因此除非您有充分的理由,否则不要这样做。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何从C ++中的构造函数中捕获异常

来自分类Dev

我应该在哪里捕获构造函数中引发的C ++异常?

来自分类Dev

无法从c ++中的函数捕获异常

来自分类Dev

无法从c ++中的函数捕获异常

来自分类Dev

在构造函数C ++中引发异常

来自分类Dev

在构造函数C ++中引发异常

来自分类Dev

构造函数中的异常 - C++

来自分类Dev

在构造函数中捕获异常

来自分类Dev

C ++,处理构造函数的异常

来自分类Dev

C ++重载异常的构造函数

来自分类Dev

从构造函数中调用构造函数并捕获异常

来自分类Dev

如何捕获在C函数调用的Haskell回调函数中引发的Haskell异常?

来自分类Dev

C ++,静态对象构造函数中的异常会绕过先前静态对象的析构函数

来自分类Dev

C ++类构造函数引发异常

来自分类Dev

使用move构造函数引发异常?(C ++)

来自分类Dev

堆栈对象的C ++构造函数异常处理

来自分类Dev

调用构造函数时异常的C ++行为

来自分类Dev

使用cython从C ++构造函数传播异常

来自分类Dev

C ++ lambda构造函数参数可以捕获构造的变量吗?

来自分类Dev

如何从构造函数中捕获异常而不处理整个函数?

来自分类Dev

如何捕获构造函数异常?

来自分类Dev

我正在尝试创建一个使用C ++中的参数包构造函数的异常类

来自分类Dev

C#的自定义异常处理中的base()构造函数。它是如何工作的?

来自分类Dev

如何使用基于 C# 中自定义异常构造的函数抛出自定义异常?

来自分类Dev

C ++中的复制构造函数

来自分类Dev

在C ++中绕过构造函数

来自分类Dev

C#中的构造函数

来自分类Dev

C ++中的Promotion构造函数

来自分类Dev

了解C ++中的构造函数

Related 相关文章

热门标签

归档