gpt4 book ai didi

c++ - 如何给 child 一个指向 parent 的弱指针? (C++)

转载 作者:行者123 更新时间:2023-12-01 23:29:27 25 4
gpt4 key购买 nike

我读过 here也就是说,在某些父对象唯一拥有多个子对象并且每个子对象都需要能够访问其父对象的情况下,应该使用弱指针作为后向指针而不是共享指针,以避免依赖循环。

我有两个问题:

  1. 与简单的引用相比,给父对象一个弱指针有什么好处?
  2. 在下面的代码中,我应该如何向每个子节点传递一个指向其父节点的弱指针?我知道您可以从 std::enable_shared_from_this 继承以从 this 获取共享指针。有弱指针的等价物吗?还是别的?
#include <memory>
#include <vector>

class Parent;

class Child {
public:
void set_parent(std::weak_ptr<Parent> parent) {
parent_ = parent;
}
std::weak_ptr<Parent> parent_;
};

class Parent {
void add_child(std::unique_ptr<Child> child) {
// child->set_parent(???);
children_.push_back(std::move(child));
}
std::vector<std::unique_ptr<Child>> children_;
};

最佳答案

weak_ptr 来自 shared_ptr。如果您的父节点“唯一拥有”子节点,则子节点不能向其父节点拥有 weak_ptr,因为这需要 shared_ptr他们存在于某处。

请注意,您引用的示例并未说明项目之间关系的“唯一所有权”。

此外,只要 parent 永远不会放弃对 child 的所有权以在系统外进行编码,就没有理由不只是有一个指向 parent 的常规指针(它需要是一个指针,因为引用不能更改) .指针将始终有效(从系统外部),因为父项必须存在才能使子项存在。毕竟,这就是独特所有权的含义。

关于c++ - 如何给 child 一个指向 parent 的弱指针? (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66570718/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com