智能指针是一种特殊的指针,它不仅具有指针的特性,还具有一些额外的功能,可以帮助程序员更方便地管理和使用指针。下面是一些关于智能指针的常用函数和类:
1、unique_ptr:独占锁智能指针。
unique_ptr 可以自动管理内存分配和释放,避免了手动管理内存带来的麻烦和错误。unique_ptr 有两种创建方式:unique_ptr(new T) 和 unique_ptr(T* p),其中 T 必须是 delete 的,即不能是 unique_ptr 或 shared_ptr。
unique_ptr(new T):用于分配新的内存空间并返回指向该空间的智能指针。如果分配内存失败,则会抛出 std::bad_alloc 异常。
unique_ptr(T* p):用于从现有对象中分配内存空间并返回指向该空间的智能指针。如果分配内存失败,则会抛出 std::bad_alloc 异常。unique_ptr 只允许移动(move)而不允许复制(copy),因为它只关心指针所指向的对象是否已经分配了内存。
2、shared_ptr:共享锁智能指针。
shared_ptr 用于管理共享资源的内存,允许多个智能指针指向同一个对象。shared_ptr 有两种创建方式:shared_ptr(new T) 和 shared_ptr(T* p, std::function<void(void)> deleter),其中 deleter 是一个可调用对象,用于在对象不再需要时自动释放内存。
shared_ptr(new T):用于分配新的内存空间并返回指向该空间的智能指针。如果分配内存失败,则会抛出 std::bad_alloc 异常。
shared_ptr(T* p, std::function<void(void)> deleter):用于从现有对象中分配内存空间并返回指向该空间的智能指针。如果分配内存失败,则会抛出 std::bad_alloc 异常。与 unique_ptr 不同,shared_ptr 可以在对象不再需要时自动释放内存,因为它使用了一个可调用对象来管理内存。
3、weak_ptr:弱引用智能指针。
weak_ptr 用于跟踪对象的最后一个引用,即使对象被释放或销毁,它也会保持指向该对象的引用。weak_ptr 只能用于对象类型,而不能用于其他类型,如数组、函数等。
weak_ptr():创建一个弱引用智能指针。
weak_ptr(T* p):用于创建一个指向现有对象的弱引用智能指针,如果对象已经被释放或销毁,则会抛出 std::bad_weak_ptr 异常。weak_ptr 可以用于任何支持引用的类型。
4、unique_ptr:自定义类型智能指针。
创建一个包含单一成员 value 和唯一插槽的结构体类型,插槽点默认为该结