【发布时间】:2014-01-09 19:02:57
【问题描述】:
我构建了一个名为 Attribute 的对象,这个对象有完整的副本和空的构造函数。 然后我构建了另一个名为 Human 的对象,其中包含 Attribute 对象。 当我尝试以某种方式构建人类类(带有完整构造函数)时,它会自动调用 Attribute 复制构造函数,我不知道为什么。
代码如下:
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);
当我使用调试器并到达这一行时: new Human("Name", *a);它会自动进入这个函数:
Attribute::Attribute(Attribute& copy)
{
Attribute(copy.height, copy.eyeColor, copy.skinColor, copy.hairColor, copy.diseases, copy.numOfDiseases);
}
只有在这个函数结束后,它才会启动 Human 完整构造函数...
【问题讨论】:
-
Rule of three 很可能...
-
您真的需要在堆上分配
Human和Attribute(即使用new并保留一个指针)吗?我的感觉是,您使用 C++ 就好像它在 Java 中一样,这并不好。 -
您正在泄漏内存。只要您不熟悉指针(可以说即使您熟悉),请使用 std::string 而不是 char*。
-
您正在调用 new[],将返回值分配给一个指针,然后出于某种原因将分配的值替换为指向字符串文字的指针,从而导致内存泄漏。
d[0] = new char[10];d[0] = "aa"; \\ huh?? -
Human的构造函数是什么样的?
标签: c++ object constructor copy