考虑贝罗代码片段:new操作符不调用构造函数
class Base
{
public:
Base()
{
cout<<"Constructor"<<endl;
}
Base(const Base& rhs)
{
cout<<"Copy constructor"<<endl;
}
Base* Clone()
{
return new Base(*this); <--------------- 2
}
void* operator new(size_t size)
{
void* p=malloc(size);
cout<<"Inside new"<<endl;
return p;
}
};
int main()
{
Base b1; <------------ 1
Base* ptr=b1.Clone();
return 0;
}
我收到output为:
Constructor
Inside new
Copy constructor
我一直听到的是第一家运营商新的分配void类型&的一大块,然后新运算符调用构造函数将该块转换为LHS中的精确类型。
那么,为什么构造函数没有被调用语句2?
我也想知道由C++编译器的说明2.
你希望调用哪个构造函数?默认的? 'Clone'调用复制构造函数,因为你通过'* this'作为参数..我错过了什么吗? – 2012-08-10 22:48:51