![]() |
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
分别删除每个指针,然后删除整个数组。请确保为存储在数组中的类定义了正确的析构函数,否则无法确保正确清理对象。确保所有析构函数都是虚拟的,以便在与继承一起使用时它们的行为正常。 |
![]() |
rookie · 检查函数模板的所有参数包参数是否属于int 1 年前 |
![]() |
ivaigult · -W转换和隐式字符串到布尔类型转换 1 年前 |
![]() |
rainer · 后台插入程序的初始化 1 年前 |
![]() |
Community wiki · 以理智、安全和高效的方式复制文件 1 年前 |
|
Shefali Kanaujia · 对C中向量的向量进行排序++ 1 年前 |
|
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |