![]() |
1
2
在构造函数中复制对象时:
并且一个对象包含一个指针,类似于
将导致错误(这是未定义的行为)。顺便说一句:你还应该看看“三条规则”。 What happens when you deallocate a pointer twice or more in C++? |
![]() |
2
1
正如评论和其他人已经提到的那样,问题的出现是因为你没有遵循 rule of three ,也就是说,由于您必须定义自定义析构函数(以删除动态分配的内存),因此您至少应该定义一个自定义复制构造函数(它对数组进行深度复制,即分配新内存并复制旧数组的内容)和一个自定义复盖赋值运算符(它的作用基本相同,因此您可以从另一个方面实现其中一个)。 复制构造函数的示例代码(当然是次优的):
可以看出,这将涉及一点工作,而且非常乏味,这就是为什么您应该先遵循 rule of zero 并且使用已经在本质上处理所有权问题的类(在您的情况下,应该是std::vector),所以与其直接处理动态分配的数组,不如将其更改为类似于以下内容:
所有的问题都消失了,因为std::vector处理所需的深度复制本身,而您的类不必担心它。 我希望这能有所帮助;-) |
![]() |
3
0
|
![]() |
Toniq · javascript为php保存多维数组 1 年前 |
|
Jannis · Java中数组的怪异行为 1 年前 |
|
callum · 如何识别数组中与给定序列不匹配的元素? 1 年前 |
![]() |
tenfour · 如何使用数组元素的索引初始化数组元素 2 年前 |
![]() |
Guillaume · 使用操作从Python列表创建numpy数组 2 年前 |
![]() |
maxMas · Swift 5:为什么会出现索引超出范围错误? 2 年前 |