在对象数组中,构造函数被调用多次,而操作符new []仅被调用一次,为什么?

| 在堆中创建对象时,它(新)执行两项操作。 1:向接线员打电话 2:调用构造函数初始化对象。 我正在尝试创建对象数组,例如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]
,您获得的you2ѭ参数应为
4 * sizeof(test)
。     
        构造函数和析构函数为数组中的每个项目调用一次,而new []仅调用一次,因为您仅创建一个数组。     

要回复问题请先登录注册