在对象数组中,构造函数被多次调用但是operator new []只调用一次,为什么?

时间:2011-06-22 00:29:45

标签: c++

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

1:调用operator new

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;
}

2 个答案:

答案 0 :(得分:6)

operator new[] 在那里分配必要的空间,没有别的。当然,它只会这样做一次,因为其他任何东西都是无关的,并且不会得到连续的缓冲区。对于size,您获得的new test[4]参数应为4 * sizeof(test)

答案 1 :(得分:2)

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