首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >哪些C++智能指针实现可用?

哪些C++智能指针实现可用?
EN

Stack Overflow用户
提问于 2018-03-30 08:00:18
回答 2查看 0关注 0票数 0

比较,Pros,Cons,以及什么时候使用?

最终的问题是,C++中的智能指针的各种实现是什么,它们是如何比较的?只是简单的利弊或例外,以及一些你可能认为应该有效的事情。

我已经发布了一些实现,我已经使用了,或者至少忽略了这些实现,并考虑使用它们作为下面的答案,以及我对它们的差异和相似之处的理解,这些差异和相似之处可能不太准确,所以请随时根据需要检查或纠正我。

目标是了解一些新的对象和库,或者纠正我对已经广泛使用的现有实现的使用和理解,并最终为其他实现提供一个不错的参考。

EN

回答 2

Stack Overflow用户

发布于 2018-03-30 16:35:04

C ++ 03 std :: auto_ptr - 也许是第一次综合症只能提供有限的垃圾收集设施的原件之一。第一个缺点是它在销毁时调用delete,使得它们不能用于保存数组分配的对象(new [])。它拥有指针的所有权,所以两个自动指针不应该包含同一个对象。赋值将转移所有权并将右值自动指针重置为空指针。这可能导致最坏的缺点;由于上述无法复制,它们不能在STL容器内使用。任何用例的最后打击是他们将在下一个C ++标准中被弃用。 std :: auto_ptr_ref - 这不是一个智能指针,它实际上是一个与std :: auto_ptr一起使用的设计细节,允许在某些情况下进行复制和分配。具体来说,它可以用于使用Colvin-Gibbons技巧(也称为移动构造函数来转移所有权)将非const std :: auto_ptr转换为左值。 相反,std :: auto_ptr实际上并不打算用作自动垃圾收集的通用智能指针。我的有限理解和假设大部分都是基于Herb Sutter的有效使用auto_ptr,我经常使用它,尽管并不总是以最优化的方式。 C ++ 11 std :: unique_ptr - 这是我们的朋友谁将会取代std :: auto_ptr它会非常相似,除了关键的改进,以纠正std :: auto_ptr的弱点,如使用数组,通过私有拷贝构造函数的左值保护,可用使用STL容器和算法等等。由于性能开销和内存占用有限,因此这是替换的理想候选,或者更适合描述为拥有原始指针。由于“唯一”意味着只有一个指针的所有者,就像之前的std :: auto_ptr一样。 std :: shared_ptr - 我相信这是基于TR1和boost :: shared_ptr,但改进包括别名和指针算术。简而言之,它将引用计数的智能指针包装在动态分配的对象周围。由于“共享”意味着当最后一个共享指针的最后一个引用超出作用域时指针可以被多个共享指针所拥有,那么该对象将被适当删除。这些也是线程安全的,在大多数情况下可以处理不完整的类型。 std :: make_shared可以用来有效地构造一个std :: shared_ptr,其中一个堆分配使用默认的分配器。 std :: weak_ptr - 同样基于TR1和boost :: weak_ptr。这是对std :: shared_ptr拥有的对象的引用,因此如果std :: shared_ptr引用计数降到零,将不会阻止删除对象。为了访问原始指针,你首先需要通过调用锁来访问std :: shared_ptr,如果所拥有的指针已经过期并且已经销毁,它将返回一个空的std :: shared_ptr。

票数 0
EN

Stack Overflow用户

发布于 2018-03-30 17:17:45

也有洛基它实现基于策略的智能指针。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100003239

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档