考虑下面的代码片段:
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;
}
我得到的输出为:
Constructor
Inside new
Copy constructor
我一直听说,第一个 operator new 分配了一块 void 类型,然后 new 运算符调用构造函数将该块转换为与 LHS 上的确切类型相同的类型。
那么,为什么没有为语句 2 调用构造函数呢?
我还想知道 C++ 编译器对语句 2 执行的确切操作系列。