21xrx.com
2024-11-22 06:59:42 Friday
登录
文章检索 我的文章 写文章
C++11智能指针赋值技巧与实例
2023-07-10 03:44:01 深夜i     --     --
C++11 智能指针 赋值技巧 实例

C++11中,智能指针是一种非常实用的工具,可以帮助程序员避免内存泄漏等问题。智能指针作为一个高级概念,是指一个指针对象,它在内部使用引用计数来追踪它所指向的对象的生存期,并在适当的时候自动释放它所指向的对象。

智能指针拥有很多种类型,比如unique_ptr,shared_ptr和weak_ptr,其中unique_ptr是独占所有权的指针,shared_ptr是共享所有权的指针,而weak_ptr是shared_ptr的弱引用指针,不会增加引用计数。

在实际编程中,对于不同的指针类型,我们需要不同的赋值技巧。比如,对于unique_ptr类型的指针,我们需要使用move来进行赋值,这是由于unique_ptr无法进行拷贝操作:


std::unique_ptr<int> ptr1(new int(10));  // 创建一个unique_ptr指针,它指向一个int类型的变量

std::unique_ptr<int> ptr2;  // 创建一个空的unique_ptr指针

ptr2 = std::move(ptr1);  // 将ptr1的所有权转移给ptr2,ptr1变为空指针

对于shared_ptr类型的指针,我们可以使用直接赋值的方式来进行赋值,这是因为shared_ptr可以进行拷贝操作:


std::shared_ptr<int> ptr3(new int(20));  // 创建一个shared_ptr指针,它指向一个int类型的变量

std::shared_ptr<int> ptr4;  // 创建一个空的shared_ptr指针

ptr4 = ptr3;  // 将ptr3的所有权转移给ptr4,ptr3计数器加一,ptr1计数器减一

对于weak_ptr类型的指针,我们需要通过lock方法来获取其指向的对象的shared_ptr指针,再进行赋值操作:


std::shared_ptr<int> ptr5(new int(30));  // 创建一个shared_ptr指针,它指向一个int类型的变量

std::weak_ptr<int> ptr6(ptr5);  // 创建一个weak_ptr指针,它指向ptr5所指的对象

std::shared_ptr<int> ptr7 = ptr6.lock();  // 获取ptr6所指对象的shared_ptr指针,并进行赋值操作

总之,使用智能指针可以极大地提高程序的效率,同时还能避免内存泄漏等问题的发生。对于不同类型的智能指针,使用不同的赋值技巧可以帮助我们更好地管理内存,使程序更加健壮和可靠。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复