C++标准是否保证new创建的MyClass数组每个实例调用默认构造函数?
问题解答:数组动态分配时是否会调用每个实例的默认构造函数?
首先给出定义的类代码:
claas MyClass { public: MyClass():x(0), p(nullptr) {} private: int x; int* p; };
以及对应的main函数代码:
int main() { MyClass* ptr = new MyClass[5]; }
问题
根据C++标准规范,指针ptr指向的MyClass数组中的每个实例,是否都会被保证调用默认构造函数?
回答
会的。按照C++标准规定,当使用new T[N]的数组动态分配语法时,数组中的每一个元素都会被调用默认构造函数,前提是T拥有可访问的默认构造函数。
在你的代码里,MyClass显式定义了公有的无参默认构造函数,完全符合要求。因此new MyClass[5]会创建5个MyClass对象,每个对象都会执行你定义的默认构造函数,将成员x初始化为0,指针p初始化为nullptr。
需要补充的是,如果MyClass没有可访问的默认构造函数(比如默认构造函数被删除,或者所有构造函数都需要传入参数),那么new MyClass[5]这种写法会直接编译失败。
内容的提问来源于stack exchange,提问作者Sampath
相关产品推荐
相关产品推荐

