问题标签 [smart-pointers]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
10 回答
12085 浏览

c++ - 智能指针的优缺点

我知道智能指针用于资源管理并支持 RAII。

但是,在哪些极端情况下智能指针看起来并不聪明,并且在使用它时要记住的事情是什么?

0 投票
2 回答
675 浏览

c++ - C++ 设计问题(需要便宜的智能指针)

我有一棵巨大的树,其中节点内部的键是大 hash_map v 的索引,其中 v[key] 是与该键关联的(大)记录(包括树中有多少个节点具有此键)。现在,key 是一个整数。所以每个节点都有存储子指针和整数的开销。
我们可以从树中的节点中删除一个键。我们不能将实际记录存储在树节点中(因为那会占用内存)。当从节点中删除键时,我们需要查看 v,更新计数并删除元素(并压缩向量)。

这需要一个智能指针实现:我们有一个 shared_ptr 分布在树周围。一旦删除了引用键 k 的最后一个节点,该对象就会被销毁。

但是,我对 shared_ptr 的大小要求持怀疑态度。我需要一个廉价的参考计数智能计数器。我不关心并发访问。

0 投票
1 回答
1248 浏览

boost - 增强信号 - 如何控制发送给订阅者的对象的生命周期?智能指针?

我在 Red Hat Enterprise Linux 5.3 下使用 boost::signals2。

我的信号创建了一个对象副本并将其指针发送给订阅者。这是为了线程安全而实现的,以防止工作线程在读取对象的同时更新对象上的字符串属性(也许我应该重新考虑使用锁?)。

无论如何,我担心的是多个订阅者在他们自己的线程上取消引用指向复制对象的指针。如何控制对象的生命周期?我如何知道所有订阅者都已使用该对象并且可以安全地删除该对象?

提前感谢任何提示或方向,

-埃德

0 投票
2 回答
466 浏览

c++ - auto_ptr 莫名其妙的行为

使问题更具体:当前该类具有复制构造函数,因此 a.show() 打印的 auto_ptr 的值没有问题(第二次调用时)。它与启动时相同)。它保持不变。如果我从类 MyClass 中删除复制构造函数,则 a.show() 打印的 auto_ptr 的值(当它被第二次调用时)为 NULL。

0 投票
4 回答
1887 浏览

c++ - 关于智能指针的书

你能告诉我一些非常清楚地解释智能指针的想法的书籍(初级、中级和高级)吗?

谢谢你。

0 投票
9 回答
12767 浏览

c++ - 自动指针的优点/缺点

与普通指针相比,使用自动指针(auto_ptr)有哪些优缺点?我听说它会自动释放内存,但为什么不经常使用?

0 投票
5 回答
8019 浏览

c++ - 关于 shared_ptr 用法的问题 - C++

我对使用shared_ptr.

问题 1

抄袭shared_ptr便宜吗?还是我需要将它作为对我自己的辅助函数的引用并作为值返回?就像是,

问题2

我应该boost::make_shared用来构造一个shared_ptr吗?如果是,它提供了哪些优势?make_sharedT没有无参数构造函数时,我们如何使用?

问题 3

如何使用const foo*?我找到了两种方法来做到这一点。

或者

问题 4

如何返回并检查NULL对象shared_ptr?是不是有点像,

任何帮助都会很棒。

0 投票
3 回答
4460 浏览

c++ - 在多线程程序中提升weak_ptr来实现资源池

我正在考虑使用 boost::weak_ptr 来实现一个对象池,这样当没有人使用其中一个对象时它们就会被收割。不过,我担心的是它是一个多线程环境,并且似乎在最后一个 shared_ptr 到超出范围的对象与从weak_ptr 构造的新 shared_ptr 之间存在竞争条件。通常,您会使用锁定或其他东西来保护此类操作;但是,这里的重点是您不知道 shared_ptr 何时可能超出范围。

我对 boost::shared_ptr 和 boost::weak_ptr 有误解吗?如果没有,是否有人对该怎么做有什么好的建议?

谢谢。

安德鲁

0 投票
2 回答
929 浏览

c++ - 将 shared_ptr 与在堆栈上创建的对象进行比较

我有一种情况,我想将由 shared_ptr 封装的对象与在堆栈上创建的相同类型的对象进行比较。目前,我正在获取原始指针并取消引用它以进行比较,例如:

有一个更好的方法吗?这是假设当两个对象相遇并相互比较时,一个是 shared_ptr 而另一个不是。

0 投票
2 回答
3238 浏览

c++ - C++ 智能指针中的循环引用计数

在 shared_ptr 智能指针中,使用了引用计数。然而,引用计数有一个问题,它不能打破引用循环。

我对这个问题有四个问题。

1) 谁能给我一个参考周期发生的片段?

2)如果不能打破引用循环,RCSP如何保证成功的资源管理?有什么办法可以打破第 3 方产品的循环?

3)有没有办法避免参考循环?

4)其他智能指针怎么样?他们如何处理源头管理?例如,share_ptr、scope_ptr?

非常感谢!