我发现很难找到关于安全复制新类对象而不处理复制构造函数的在线参考。我正在为一个名为“CLabel”的子类开发一个构造函数方法,教授对这个特定构造函数的逻辑(这是 3 个中的第一个)的评论如下:
“这个构造函数安全地复制了一个 CLabel,以保证没有内存泄漏。”
函数头如下:
CLabel::CLabel(const CLabel& L)
现在看看类本身的上下文,它的声明中没有明确的数据成员。所以我现在的问题是如何制作一个通过不包含数据成员的引用传递的类实例的深层副本。
到目前为止,这是我的破解 - 它可以编译,但 Visual Studio 发现了一个异常 - “t1.exe 中 0x770F380B (ntdll.dll) 处的未处理异常:0xC0000374:堆已损坏(参数:0x7710CDD8)。”:
*this = L;
int l = L.width();
this->_data = new char[l+1];
int i = 0;
for(; i < l; i++)
((char*)_data)[i] = ((char*)L._data)[i];
((char*)_data)[i] = '\0';
异常在测试文件的这一行被捕获:
int mesIndx = D.add(new CLabel(7, 5, 40));
对于此特定作业的尽可能多的上下文,API 的文档位于http://zenit.senecac.on.ca/wiki/index.php/The_CUI_Framework_-_OOP344_20132#CLabel
感谢大家。