【发布时间】:2023-03-12 22:54:02
【问题描述】:
我发现很难找到关于在不处理复制构造函数的情况下安全复制新类对象的在线参考。我正在为一个名为“CLabel”的子类开发一个构造函数方法,教授的 cmets 用于这个特定构造函数的逻辑(这是 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
谢谢大家。
【问题讨论】:
-
如果没有看到更多
CLabel代码,就很难说出任何事情。
标签: c++ memory-management memory-leaks copy-constructor