그래서 Attribute라는 객체를 만들었습니다.이 객체에는 전체 복사본과 빈 생성자가 있습니다. 그런 다음 Human이라는 다른 객체를 작성했습니다.이 객체에는 Attribute 객체가 들어 있습니다. 필자가 (전체 생성자를 사용하여) 휴먼 클래스를 빌드하려고하면 자동으로 Attribute 복사 생성자가 호출되며 이유가 없습니다. 여기 복사 생성자가있는 C++은 작동하지 않습니다.
코드입니다 :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);
내가 디버거를 사용하고이 라인에 도착 : 새 인간 ("이름", * A); 자동으로이 기능을 입력 :
Attribute::Attribute(Attribute& copy)
{
Attribute(copy.height, copy.eyeColor, copy.skinColor, copy.hairColor, copy.diseases, copy.numOfDiseases);
}
이 기능이 종료 된 후에 만, 그것은 인간 전체 생성자를 시작합니다 ...
난 당신이 나를 도울 수있을 것입니다 희망 .... 덕분에
[규칙 3] (http://stackoverflow.com/questions/11024438/rule-of-three-in-c) 아마도 ... –
정말 '인간'과 '속성'을 할당해야합니까? 힙에 (즉,'새'를 사용하고 포인터를 유지)? 내 감정은 당신이 자바를 사용하는 것과 C++을 사용하는 것이 좋지 않다는 것이다. –
메모리 누수가 있습니다. 포인터에 익숙하지 않은 경우 (그리고 틀림없이 여러분이있을 때조차도) char *가 아닌 std :: string을 사용하십시오. – nvoigt