我在我的代码中大量使用了boost :: scoped_ptr,它很棒,但我目前正在使用整个地方使用shared_ptr的软件,我想知道我是否遗漏了一些东西.
AFAIK a shared_ptr仅在不同的线程要访问相同的数据并且您不知道线程将完成的顺序时才有用(使用shared_ptr确保对象存在,直到最后一个线程完成它为止).
还有其他用例吗?
AFAIK a shared_ptr仅在不同线程要访问相同数据时才有用
嗯,这适用于多个所有者拥有智能指针指向的相同对象的情况.他们可以从不同的线程访问智能指针,而shared_ptr也可以在该区域中使用,但这不是主要观点.如果最后一个所有者丢失了对指向的对象的引用,则shared_ptr机制将删除该对象.
你可以使用scoped_ptr,如果你想拥有的是一个在创建它的范围时被删除的指针(通过异常,转到外部的地方,或者通过正常的控制流或其他机制).如果您这样使用它,则无需更改为shared_ptr.
线程在这里无关紧要.有意义的是,是否容易指定对象不再使用的点.
假设有几个不同的对象想要使用同一个对象.它可能是一组数据,或输入/输出,或某些几何对象,或其他任何东西.您希望在删除所有使用对象后删除共享对象,而不是之前的时钟周期.您可以使用shared_ptr强制执行此操作,而不是确定哪个拥有对象具有最长的生命周期(如果您更改程序或可能通过用户交互,则可以更改).
使用对象是在相同还是不同的线程中无关紧要.对象可能具有不可预测的生命周期,即使它们都在同一个线程中.