我在我的代码中大量使用了 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/