为什么 Person* p3 = new Person[5](7)
在下面的代码中失败了?如何使用 operator new[]
作为参数化构造函数?如果想用 new[]
调用参数化构造函数怎么办?
class Person
{
public:
int age;
Person(){}
Person(int age):age(age){}
void* operator new(size_t size) throw(bad_alloc)
{
cout<<"In overloaded new"<<endl;
return (::operator new(size));
}
void operator delete(void* ptr) throw()
{
cout<<"in overloaded delete"<<endl;
::operator delete(ptr);
}
void* operator new[](size_t size) throw(bad_alloc)
{
cout<<"operatoe new[]"<<endl;
return (::operator new[](size));
}
void operator delete[](void* ptr) throw()
{
cout<<"delete[]"<<endl;
::operator delete[](ptr);
}
};
int main()
{
Person *p1 = new Person(); //// This is fine
Person* p2 = new Person[5]; /// This is fine
Person* p3 = new Person[5](7) /////Want to invoke parametrized constructor..
delete p1;
return 0;
}
最佳答案
new
表达式中的初始化程序必须与变量初始化的形式相同(参见 [expr.new])。这意味着对于数组,只允许三种形式:
T * p1 = new T[N]; // default-initialization
T * p2 = new T[N](); // value-initialization
T * p3 = new T[N] { a, b, c }; // list-initialization
初始化器的含义与变量声明语句相同。
关于c++ - 为参数化构造函数重载运算符 new[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25928249/