|
|
1
42
不正确的原因是
另一个实现是正确的,因为数组中的指针指向动态分配的
请注意,对于当前的内存分配策略,您可能希望声明自己的复制构造函数和复制分配运算符,以便无意中的复制不会导致双重删除。(如果要防止复制,可以将它们声明为私有的,而不是实际实现它们。) |
|
|
2
35
为了
|
|
|
3
11
第二种情况下是正确的(好吧,至少是错误的)。
编辑:“最小错误”,如原始代码中所示,没有充分的理由使用
其结果是代码更简单,职责分离更清晰。 |
|
|
4
10
为了简化Answare,我们来看下面的代码:
输出是: 析构函数A 1 然后它就崩溃了(表达式:_block_type_is_valid(phead-nblockuse))。 我们需要使用:删除[]arr;因为它删除了整个数组,而不仅仅是一个单元格! 尝试使用delete[]arr;输出为: 析构函数A 10 析构函数A 9 析构函数A 8 析构函数A 7 析构函数A 6 析构函数A 5 析构函数A 4 析构函数A 3 析构函数A 2 析构函数A 1 同样的原理也适用于指针数组:
如果我们使用delete arr而不是delete[]arr,它不会删除数组中的所有指针=>指针对象内存泄漏! |
|
|
5
5
如您所见,您试图使用错误的删除形式(非数组与数组)释放,并且指针0x22ff38从未被调用new返回。第二个版本显示了正确的输出:
无论如何,我更喜欢一种设计,在这种设计中,不需要从手动实现析构函数开始。
|
|
|
6
3
您的第二个示例是正确的;您不需要删除
|
|
|
7
1
如果您的代码是这样的,它将使sens:
|
|
|
8
0
分别删除每个指针,然后删除整个数组。请确保为存储在数组中的类定义了正确的析构函数,否则无法确保正确清理对象。确保所有析构函数都是虚拟的,以便在与继承一起使用时它们的行为正常。 |
|
|
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 8 月前 |
|
|
bairog · 从按属性筛选的对象数组字典中创建值数组 8 月前 |
|
|
Anka Hanım · 关于结构和动态数组地址的问题 8 月前 |
|
|
Geremia · 2D NumPy数组+1D数组? 9 月前 |
|
|
MARTIN · 交换第一个和最后一个单词,反转所有中间的字符 10 月前 |
|
|
Paul Williams · 迭代数组时输出有问题 10 月前 |