gpt4 book ai didi

c++ - The C++ Programming Language 中的弱指针示例

转载 作者:行者123 更新时间:2023-11-30 05:02:45 24 4
gpt4 key购买 nike

试图理解 Stroustrup 的 TCPL(第 995 页,第 4 版)中的 weak_ptr 示例。我知道目标是在需要时获取共享指针(指向邻居小行星)。示例代码为:

void owner()
{
//...
vector<shared_ptr<Asteroid>> va(100);
for (int i = 0; i < va.size(); ++i) {
va[i].reset(new Asteroid(weak_ptr<Asteroid>(va[neighbor]))); // why?
}
}

标记行中发生了很多事情。我不明白为什么要使用reset,为什么构造函数接受一个weak_ptr?有人可以更详细地解释该行吗?

最佳答案

解释指定行,- Asteroid() 构造函数将接受一个 weak_ptr 作为参数并返回一个 shared_ptrvector element va[i] 在接受新的 shared_ptr 之前通过调用 reset 放弃了任何早先的所有权。

简化的代码如下所示:每个新的 Asteroid 都会有一个指向另一个相邻 Asteroid 的指针,这个指针应该是一个 weak_ptr 以避免由于相互连接的 Asteroid 指针而导致循环引用。

vector<shared_ptr<Asteroid>> va(100);
for (int i = 0; i < va.size(); ++i)
{
shared_ptr<Asteroid>sp = va[neighbor];
weak_ptr<Asteroid> wp = sp;
shared_ptr<Asteroid>sp2 = make_shared<Asteroid>(wp);
va[i].reset(sp2);
}

关于c++ - The C++ Programming Language 中的弱指针示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49709885/

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