【C++11】智能指针与动态内存

时间: 2023-11-14 admin 维修知识

【C++11】智能指针与动态内存

【C++11】智能指针与动态内存

系列文章目录


文章目录

  • 系列文章目录
    • 前言
    • 一、智能指针类型
      • 共享指针(shared_ptr)
      • 弱指针(weak_ptr)
      • 独占指针(unique_ptr)


前言

C++中的动态内存管理是通过一对运算符来完成的:new,在动态内存中为该对象分配空间并返回一个指向该对象的指针。delete,接受一个动态对象的指针,销毁该对象,并释放指向的内存。

动态内存的使用很容出现问题,因为确保在正确的时间释放内存是及其困难的。有时候我们忘记释放内存,就产生了内存泄漏;有时候尚有指针引用内存的情况下我们就释放了,在这种情况下就会产生引用非法内存的指针。

为了更容易,也更安全的使用动态内存,C++11标准库提供了俩种智能指针(smart pointer)来管理动态对象。智能指针的行为类似常规指针,重要的区别是它负责自动释放指向的对象。


一、智能指针类型

共享指针(shared_ptr)

这是一种更强大和灵活的智能指针,它可以与其他shared_ptr共享所有权。当最后一个shared_ptr离开作用域或被重置时,它所拥有的对象将被自动删除。

弱指针(weak_ptr)

这是一种不拥有对象所有权的智能指针,它指向由shared_ptr管理的对象(伴随类)。weak_ptr的存在不会增加对象的引用计数,也不会阻止其被销毁。它们主要用于避免循环引用问题。

独占指针(unique_ptr)

这是一种简单但强大的智能指针,它可以在堆上创建一个对象并拥有其所有权。当unique_ptr离开作用域或被重置时,它所拥有的对象将被自动删除。