在对象数组中,构造函数被调用多次,但运算符new[]只被调用一次,原因是什么

In the array of objects, constructor is called many times but operatror new[] only once , why?

本文关键字:调用 是什么 一次 运算符 数组 对象 构造函数 new      更新时间:2023-10-16

当在堆中创建对象时,它(new)会做两件事。

1:呼叫运营商新

2:调用构造函数来初始化obejct。

我正在尝试创建对象数组,例如4个对象,所以它调用构造函数和析构函数4次,这是有意义的,但它只调用一个时间运算符new[]??为什么?以下是我尝试运行的代码。

#include <iostream>
using namespace std;
class test
{
    public:
       static void *operator new[] (size_t size)
       {
           cout<<"operaotor new called"<<endl;
           return ::operator new[](size);
       }
       test()
       {
          cout<<"constructor called"<<endl;
       }
       ~test()
       {
          cout<<"destructor called"<<endl;
       }
};
int main()
{
     test *k = new test[4];
     delete []k;
}

operator new[]只是用来分配必要的空间,没有其他东西。当然,它只会这样做一次,因为其他任何东西都是不相关的,不会得到连续的缓冲区。在new test[4]的情况下,您得到的size参数应该是4 * sizeof(test)

构造函数和析构函数对数组中的每个项调用一次,而new[]只调用一次因为您只创建了一个数组。