|
|
1
2
所以,这里的第一个问题是,你使用的是向量中单个节点的地址。但是,随着时间的推移,当您向向量中添加更多的节点对象时,这些指针可能会变得无效,因为向量可能会移动节点。 (向量从预先分配的某个大小开始,当您填满它时,它会分配一个新的、更大的存储区域,并将所有元素移动到新位置。我敢打赌,在您的情况下,只要将第二个节点添加到节点,它就会执行此操作。)
|
|
|
2
2
一个问题是,push-back可以强制重新分配向量,即创建一个较大的内存块,将所有现有元素复制到该较大的块,然后删除旧块。从而使指向向量中元素的任何指针失效。 |
|
|
3
1
问题是,每次添加到向量时,可能需要 . 如果它这样做了,它会分配一个新的存储,复制所有内容,并删除旧的存储, 所有的目标。 作为解决问题的方法,你可以
除了你的问题,还值得一提:
|
|
4
1
只需添加到现有的答案中;不要使用原始指针,而是考虑使用某种形式的智能指针,例如,如果boost可用,则考虑使用shared-ptr。
和
因此,您只需要创建一个Node实例,它是为您“管理”的。在Node类中,您可以为父节点选择一个shared_ptr(如果要确保在移除所有子节点之前父节点不会被清理,或者可以将其设置为弱的_ptr)。 使用共享指针也有助于缓解在多个容器中存储“句柄”的问题(即。您不必担心所有权问题—只要删除所有引用,对象就会被清除)。 |
|
|
5
0
在我看来,您的代码看起来不错,但请记住,当节点超出范围时,列表将变为无效。 |
|
|
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 1 年前 |
|
|
Anka Hanım · 关于结构和动态数组地址的问题 1 年前 |
|
|
tTt · 使用堆栈中的值重新分配指针 1 年前 |
|
|
manuel · 现代C中空指针的替代方案++ 1 年前 |