![]() |
1
4
基本上,您创建了太多的UString,需要更多的引用,并且没有实现析构函数,所以当它们都从堆栈中脱落时,它们就不会被释放。 另外,在赋值运算符中,需要将result.values设置为空,否则内存将被删除。你可以用一个移动接线员使这是一个很好的快速操作,虽然我仍然不明白为什么你会这样做。 |
![]() |
2
13
毁灭者在哪里
属于
例如,让我们看一下赋值运算符:
你通过了
让我们看看这三个案例中的一个,即
既然你显然 大量的复制构造和传递值在没有析构函数的情况下进行 为了释放分配的内存,您将获得大量未释放的内存。
另外:你为什么要用
你只需写:
|
![]() |
3
2
为什么是
|
![]() |
4
2
一旦你实现了析构函数,这个赋值的实现就会咬你一口。
不,它不是离开未实现的析构函数的参数。 编辑: UString对象拥有一个分配了malloc的数组,当它被销毁时,应该释放该内存。 如果创建本地对象
当函数返回时,它将被销毁。 在线中
您从本地对象result复制指针,但result不知道它,因此它应该销毁数组,并将*这个数组保留为悬空指针。您必须以某种方式更改结果的状态,以防止释放内存,因为您从中获得了数组的所有权。一种方法是将指针设置为空。在空指针上调用free是合法的,因此您不必担心试图通过结果的析构函数释放内存。
|
![]() |
5
0
只是一些提示。另一方面,您的代码非常难以阅读和理解。如果你希望别人能和你一起工作,你真的应该做些什么。使您的名称更具描述性,将重复出现的代码重构为表示其功能的函数。例如,不使用
|
![]() |
AstralHex · 矩阵乘法代码工作不正常 7 月前 |
![]() |
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 8 月前 |
![]() |
Die4Toast · 递归调用成员箭头运算符-> 8 月前 |
![]() |
Anka Hanım · 关于结构和动态数组地址的问题 8 月前 |