c++ - 惯用 std::auto_ptr 还是只使用 shared_ptr?

标签 c++ coding-style smart-pointers tr1

既然 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/

相关文章:

c++ - GLSL 镜面光照

javascript - 链接 Underscore.js 函数的首选方式是什么?

emacs - 在 Emacs 中递归识别超过 80 个字符的行

sql - 有没有一种有效的方法来避免 SQL 中固定值的联合?

c++ - 智能指针的实现

c++ - 使用在不同的.cpp文件中在main.cpp中创建的类型的对象

C++突然阻止使用VideoCapture从IP摄像机读取帧

c++ - 为什么这个自定义指针类会崩溃?

c++ - 使用二进制堆从数组中获取前 x 个整数或使用快速排序会更快吗

c++ - Shared_ptr 在创建 boost 线程时从未被释放