考慮貝羅代碼片段: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