C++ 参数化构造函数的重载运算符new[]
为什么C++ 参数化构造函数的重载运算符new[],c++,C++,为什么Person*p3=新人[5](7)下面的代码失败了?如何为参数化构造函数使用运算符new[]?如果要使用new[]调用参数化构造函数,该怎么办 class Person { public: int age; Person(){} Person(int age):age(age){} void* operator new(size_t size) throw(bad_alloc) { cout<<"In
Person*p3=新人[5](7)
下面的代码失败了?如何为参数化构造函数使用运算符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;
}
班级人员
{
公众:
智力年龄;
Person(){}
个人(年龄):年龄(年龄){}
void*运算符新建(大小)抛出(错误分配)
{
cout怎么样
Person* p = new Person[5]{7, 7, 7, 7, 7};
?新表达式中的初始值设定项必须与变量初始化的初始值设定项具有相同的形式(参见[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
初始值设定项的含义与变量声明语句的含义相同。您真的认为“这是失败的”吗是对您的问题的有意义的描述,也是您能做的最好的描述吗?编译器错误来了。如果您发现其中一个答案有帮助,您应该这样做。这会奖励回答者,并告诉寻找需要答案的问题的人您已经有了解决方案。@WhozCraig:为什么不?看起来是正确的。(不幸的是,没有一个匹配的make_unique
发出这种初始化。)@KerrekSB它吐在我的叮当声上,虽然这不是房间里最新的闪亮物体,但考虑到list init这可以工作(我想知道为什么我的叮当声失败?)@WhozCraig我相信这会在c++11~@Owenss上编译哦,在ideone和coliru上是这样的,但出于某种原因,我在mac上的叮当声3.4给了我这只鸟。+1顺便说一句。@WhozCraig:见5.3.4/(7.4)?