所以,我構建了一個名爲Attribute的對象,該對象具有完整副本和空構造函數。 然後我建立了另一個叫Human的對象,它包含了Attribute對象。 當我嘗試構建人類(完全構造函數)不知何故它會自動調用屬性複製構造函數,我不知道爲什麼。帶複製構造函數的C++ does not工作良好
這裏是代碼:
char** d = new char*[3];
d[0] = new char[10];
d[0] = "aa";
d[1] = new char[10];
d[1] = "bb";
d[2] = new char[10];
d[2] = "cc";
Attribute *a = new Attribute(1.7, "blue", "white", "black", d, 3);
Human *h = new Human("Name", *a);
當我使用調試器,並獲得該行:新人類(「名稱」,*一);它會自動進入此功能:
Attribute::Attribute(Attribute& copy)
{
Attribute(copy.height, copy.eyeColor, copy.skinColor, copy.hairColor, copy.diseases, copy.numOfDiseases);
}
這個函數結束後才能,開始了人類完全構造函數...
我希望你能幫助我....謝謝
[規則三](http://stackoverflow.com/questions/11024438/rule-of-three-in-c)最有可能... –
你真的需要分配'Human'和'Attribute'在堆上(即使用'new'並保持一個指針)?我的感覺是,你正在使用C++,就好像它在Java和這個不好的地方一樣。 –
您正在泄漏內存。只要你不熟悉指針(甚至可以說是你),使用std :: string而不是char *。 – nvoigt