安全复制对象的替代方案
Alternatives for safely copying objects
我发现在不处理复制构造函数的情况下,很难找到一个关于安全复制新类对象的在线引用。我正在为一个名为"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] = ' ';
在测试程序文件中的这一行发现了异常:
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的内容,那么你必须确保它在最后会被销毁。
例如:如果CLabel有一个类似"char*"的成员和一个大小您必须创建一个新的缓冲区(malloc),并且不要忘记删除。
更简单的解决方案是设计带有std::string成员的CLabel类,该成员将自动管理缓冲区并分配释放内存,避免任何内存泄漏
这个头描述了一个复制构造函数,所以如果要实现它,那么您需要查看在复制构造函数上找到的文档。一般来说,它们是在C++中复制对象的正确方法。
至于他所说的防止内存泄漏是什么意思,我必须更多地了解这项任务。复制构造函数的目的通常是防止内存泄漏,即双重删除/悬挂指针。
- 运行同一解决方案的另一个项目的项目
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 使用strcpy将char数组的元素复制到另一个数组
- 是否可以初始化不可复制类型的成员变量(或基类)
- Project Euler问题4的错误解决方案
- 为什么在C++中使用私有复制构造函数与删除复制构造函数
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到
- 复制列表初始化的隐式转换的等级是多少
- 当从函数参数中的临时值调用复制构造函数时
- 如何检查文件是否复制成功?(便携式解决方案)C++
- 如何针对以下方案进行复制?
- 保证复制省略的替代方案
- (欧拉计划#3)试图将Python中的解决方案复制到C++,结果非常糟糕,不知道如何
- 安全复制对象的替代方案
- 更快的JsonCpp替代方案,允许复制/更改Json对象
- 返回值复制问题(以改进调试时间)-- 这里的解决方案是什么?
- 复制-交换总是最好的解决方案吗?
- 复制保护方案
- 转到原始解决方案中复制的解决方案中的定义搜索