gpt4 book ai didi

c++ - 我如何在我的构造函数中将 weak_ptr 分发给它?

转载 作者:可可西里 更新时间:2023-11-01 16:29:58 26 4
gpt4 key购买 nike

我正在创建一个将成为 DAG 一部分的类。构造函数将获取指向其他实例的指针,并使用它们来初始化依赖列表。
依赖列表初始化后,它只能被缩短 - 永远不能将实例添加为自身或其任何子项的依赖。

::std::shared_ptr 很适合处理这个问题。引用计数用于处理 DAG。

不幸的是,依赖项需要知道它们的依赖项——当一个依赖项更新时,它需要告诉它的所有依赖项。
这会创建一个可以用 ::std::weak_ptr 打破的小循环。依赖项可以忘记那些消失的依赖项。

但我无法找到一种方法让依赖项在构建时为其自身创建 ::std::weak_ptr

这不起作用:

object::object(shared_ptr<object> dependency)
{
weak_ptr<object> me = shared_from_this();
dependency->add_dependent(me);
dependencies_.push_back(dependency);
}

该代码导致在构造函数退出之前调用析构函数。

有没有好的方法来处理这个问题?我对仅 C++11 的解决方案非常满意。

最佳答案

不使用构造函数,而是使用函数来构建图形的节点。

std::shared_ptr<Node> mk_node(std::vector<std::shared_ptr<Node>> const &dependencies)
{
std::shared_ptr<Node> np(new Node(dependencies));
for (size_t i=0; i<dependencies.size(); i++)
dependencies[i].add_dependent(np); // makes a weak_ptr copy of np
return np;
}

如果您将其设为 static 成员函数或 Node 类的 friend,则可以将实际的构造函数设为 private

关于c++ - 我如何在我的构造函数中将 weak_ptr 分发给它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8140801/

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