相关疑难解决方法(0)

构造函数抛出异常时运行哪些析构函数?

在C++中,如果构造函数抛出异常,那么运行什么析构函数?

特别是,如果异常是在初始化列表或正文中,它会有什么不同吗?

还有,继承和成员呢?据推测,所有完工的建筑都被破坏了.如果只建造了一些成员,那么只有那些被破坏吗?如果有多个继承,那么所有已完成的构造函数都会被破坏吗?虚拟继承会改变什么吗?

c++ constructor destructor exception-handling

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

使用受保护的析构函数动态分配类数组

如果我有一个类定义的类

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-定义构造函数时,为什么允许创建单个对象而不是对象数组.

c++ visual-c++ language-lawyer c++11

35
推荐指数
2
解决办法
980
查看次数