C++ 指针 #
智能指针 #
指针类别 | 支持 | 备注 |
---|---|---|
unique_ptr |
C++ 11 | 拥有独有对象所有权语义的智能指针 |
shared_ptr |
C++ 11 | 拥有共享对象所有权语义的智能指针 |
weak_ptr |
C++ 11 | 到 std::shared_ptr 所管理对象的弱引用 |
auto_ptr |
C++ 17 中移除 | 拥有严格对象所有权语义的智能指针 |
unique_ptr #
std::unique_ptr 是通过指针占有并管理另一对象,并在 unique_ptr 离开作用域时释放该对象的智能指针。在下列两者之一发生时用关联的删除器释放对象:
- 销毁了管理的 unique_ptr 对象
- 通过 operator= 或 reset () 赋值另一指针给管理的 unique_ptr 对象。
shared_ptr #
std::shared_ptr 是通过指针保持对象共享所有权的智能指针。多个 shared_ptr 对象可占有同一对象。下列情况之一出现时销毁对象并解分配其内存:
- 最后剩下的占有对象的 shared_ptr 被销毁;
- 最后剩下的占有对象的 shared_ptr 被通过 operator= 或 reset () 赋值为另一指针。
有两种方式创建 shared_ptr
:
void main( )
{
shared_ptr<int> sptr1( new int );
// 使用 make_shared 宏可以加速创建的过程
// 因为 shared_ptr 主动分配内存并且保存引用计数 (reference count)
shared_ptr<int> sptr2 = make_shared<int>(100);
}
叶王 © 2013-2024 版权所有。如果本文档对你有所帮助,可以请作者喝饮料。