如果构造函数中的某些其他实例化失败,那么构造是否会失败

时间:2012-08-03 05:55:07

标签: c++ constructor

我有像这样的构造函数

    ClassA::ClassA(void)
    {
       pImplClassA = new (std::nothrow) pImplClassA();
       if (pImplClassA == null)
       {
         return;
       }
    }
    ClassA::SomeFunc()
    {
      pImplClassA->SomeFunc();
    }

我的问题是,如果pClassB失败,classA实例也会为null,或者在我完成此操作时它已经被实例化了。

  ClassA* pClassA = new ClassA()
    pClassA->SomeFunc();

不应该将pClassA设为null,因为构造函数已失败。如果不是,我仍然可以调用ClassA :: SomeFunc(),它会在那里崩溃,因为它没有实例化。

pClassA是否为空? 感谢

1 个答案:

答案 0 :(得分:4)

失败是什么意思?如果ClassB的构造函数抛出异常,因为你没有在ClassA的构造函数中捕获它,就好像ClassA的构造函数会抛出异常,所以不,不会创建对象,也不会有pClassA