You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 19:41:55