既然 shared_ptr
在 tr1 中,你认为 std::auto_ptr
的使用会发生什么?它们都有不同的用例,但 auto_ptr
的所有用例也都可以用 shared_ptr
解决。你会放弃 auto_ptr
还是在你想明确表示在任何给定点只有一个类拥有所有权的情况下继续使用它?
我的看法是,使用 auto_ptr
可以增加代码的清晰度,正是通过添加细微差别和代码设计的指示,但另一方面,它在训练时增加了另一个微妙的问题新程序员:他们需要了解智能指针以及它们如何工作的细节。当您在任何地方都只使用一个智能指针时,您只需制定一条规则“将所有指针包装在 shared_ptr
中”并完成它。
您对此有何看法?
最佳答案
auto_ptr 在签名方面也很不错。当函数采用 auto_ptr<T>
按值(value)计算,这意味着它将消耗 T
.如果函数返回 auto_ptr<T>
,很明显它放弃了所有权。这可以传达您关于生命周期的意图。
另一方面,使用 scoped_ptr<T>
表示您不想关心 T
的生命周期.这也意味着您可以在更多地方使用它。两个智能指针都是有效的选择,你当然可以在一个程序中同时拥有这两个。
关于c++ - 惯用 std::auto_ptr 还是只使用 shared_ptr?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/197048/