在C++中,如果构造函数抛出异常,那么运行什么析构函数?
特别是,如果异常是在初始化列表或正文中,它会有什么不同吗?
还有,继承和成员呢?据推测,所有完工的建筑都被破坏了.如果只建造了一些成员,那么只有那些被破坏吗?如果有多个继承,那么所有已完成的构造函数都会被破坏吗?虚拟继承会改变什么吗?
如果我有一个类定义的类
class A {
protected:
~A(){ }
};
Run Code Online (Sandbox Code Playgroud)
然后我可以动态分配个人以及像这样的对象数组
A* ptr1 = new A;
A* ptr2 = new A[10];
Run Code Online (Sandbox Code Playgroud)
但是,当我为这个类定义构造函数时
class A {
public:
A(){}
protected:
~A(){ }
};
Run Code Online (Sandbox Code Playgroud)
然后我可以创建单个对象
A* ptr = new A;
Run Code Online (Sandbox Code Playgroud)
但是当我尝试动态分配对象数组时
A* ptr = new A[10];
Run Code Online (Sandbox Code Playgroud)
编译器(gcc-5.1和Visual Studio 2015)开始抱怨A :: ~A()是不可访问的.
谁能解释一下: -
1-为什么定义和未定义构造函数的行为差异.
2-定义构造函数时,为什么允许创建单个对象而不是对象数组.