作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
试图理解 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_ptr
。 vector 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/
我是一名优秀的程序员,十分优秀!