【发布时间】:2017-06-06 08:53:35
【问题描述】:
如果我定义了一个类
class A {
protected:
~A(){ }
};
然后我可以动态分配单个对象以及对象数组,例如
A* ptr1 = new A;
A* ptr2 = new A[10];
但是当我为这个类定义构造函数时
class A {
public:
A(){}
protected:
~A(){ }
};
然后我可以创建单个对象
A* ptr = new A;
但是当我尝试动态分配对象数组时
A* ptr = new A[10];
编译器(gcc-5.1 和 Visual Studio 2015)开始抱怨 A::~A() 无法访问。
谁能解释一下:-
1- 为什么定义构造函数和未定义构造函数的行为差异。
2- 定义构造函数时,为什么允许我创建单个对象而不是对象数组。
【问题讨论】:
-
刚刚用 clang 测试了这个(Apple LLVM 版本 8.0.0 clang-800.0.42.1)。它的行为与 gcc 不同,无论
A是否具有显式声明的公共构造函数或所述构造函数是否为noexcept,都会向new A[10]抱怨。
标签: c++ c++11 visual-c++ language-lawyer