c++ - shared_ptr : what's it used for

标签 c++ boost shared-ptr raii

我在我的代码中大量使用了 boost::scoped_ptr,它很棒,但我目前正在使用到处都使用 shared_ptr 的软件,我想知道我是否遗漏了什么。

据我所知,shared_ptr 仅在不同线程将要访问相同数据并且您不知道线程将要完成的顺序时才有用(shared_ptr 确保对象存在直到最后一个线程完成它)。

还有其他用例吗?

最佳答案

线程在这里无关紧要。相关的是指定对象不再使用的时间点是否容易。

假设几个不同的对象要使用同一个对象。它可能是一组数据,或用于输入/输出,或一些几何对象,或其他任何东西。您希望在删除所有正在使用的对象之后删除共享对象,而不是之前的一个时钟周期。您可以使用 shared_ptr 来强制执行此行为,而不是弄清楚哪个拥有对象的生命周期最长(如果您更改程序或可能通过用户交互,这可能会发生变化)。

using 对象是在同一个线程还是不同的线程中并不重要。对象可能具有不可预测的生命周期,即使它们都在同一个线程中也是如此。

关于c++ - shared_ptr : what's it used for,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/344031/

相关文章:

c++ - Boost spirit不动点作为整数解析器

c++ - 从原始指针/引用创建智能指针

C++:execv/execvp 不使用现有的 PID

c++ - 从单独的文件中读取每个字符?

c++ - 我如何从 Boost.ASIO 获得 SSL*?

c++ - boost::shared_ptr 直接替换

c++11 - 我应该如何构造一个要使用 std::shared_ptr 管理的实例?

c++ - boost.enable_shared_from_this 并创建另一个 shared_ptr<T>

c++ - 无法将元素添加到共享指针的线程安全锁定队列中

c++ - 为什么这段代码没有编译