|
|
1
22
每当设计这样的对象时,首先需要回答一个问题:对象是否拥有该指针所指向的内存?如果是,那么显然对象的析构函数需要清理内存,所以是的,它需要调用delete。这似乎是你对给定代码的意图。 但是,在某些情况下,您可能希望有指向其他对象的指针,这些对象的生存期应该由其他对象管理。在这种情况下,您不想调用delete,因为这样做是程序其他部分的职责。此外,这将更改进入复制构造函数和赋值运算符的所有后续设计。 我将继续回答其余的问题,前提是您确实希望每个TreeNode对象拥有左对象和右对象的所有权。
不,你需要初始化
问题1:现在没有任何东西指向新的TreeNode。它会丢失并成为内存泄漏,因为任何东西都无法破坏它。
由于每个TreeNode都拥有它的左、右节点,那么最合理的做法可能就是复制。所以你会写一些类似于:
编辑-上面的段落应该是:每一段中的代码都应该有相同的最终结果,因为数据是从另一个对象复制的。这通常会涉及非常相似的代码。但是,赋值操作符可能需要检查是否已经为
事实上,有很多方法可以使用另一个来实现一个,这样操作成员变量的实际代码就只写在一个地方。其他的问题,如 this one |
|
|
2
8
我觉得更好
|
|
3
4
我会这样做:
现在最困难的部分是:
|
|
4
1
将指针设置为
我不认为你的其他代码有这样的问题。赋值运算符shallow复制节点,而复制构造函数deep复制节点。 根据您的要求采取适当的方法。:-) 编辑 : |
|
|
5
1
我还可以建议使用boost库中的boost::shared\u ptr(如果可以使用的话),而不是简单的指针吗?它可以解决很多无效指针、深度拷贝等问题。 |
|
AstralHex · 矩阵乘法代码工作不正常 1 年前 |
|
|
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 1 年前 |
|
|
Die4Toast · 递归调用成员箭头运算符-> 1 年前 |
|
|
Anka Hanım · 关于结构和动态数组地址的问题 1 年前 |