c++ 中的智能指针有哪些
时间: 2023-05-17 12:04:23 浏览: 68
C++ 中的智能指针有以下几种:
1. unique_ptr:独占所有权的智能指针,不能被复制或拷贝,可以通过 std::move 转移所有权。
2. shared_ptr:共享所有权的智能指针,可以被多个指针共享,内部维护一个引用计数器,当计数器为 0 时自动释放内存。
3. weak_ptr:弱引用智能指针,不能直接访问内存,需要通过 lock() 方法获取 shared_ptr,用于解决 shared_ptr 循环引用的问题。
相关问题
c++中智能指针的用法
在C++中,智能指针是一种封装了动态分配内存的指针类,用于自动处理内存的分配和释放,避免内存泄漏的问题。C++中有三种智能指针:std::unique_ptr、std::shared_ptr和std::weak_ptr(C++11中摒弃了auto_ptr)。它们的具体用法如下:
- std::unique_ptr:用于管理独占所有权的资源,即只能有一个指针指向该资源。可以使用std::move将unique_ptr的所有权转移给其他unique_ptr或传递给函数,而且在作用域结束时会自动释放所指向的资源。
- std::shared_ptr:用于管理共享所有权的资源,即可以有多个指针指向该资源。shared_ptr使用引用计数的方式来管理资源的释放,只有当最后一个shared_ptr释放资源时,资源才会被释放。
- std::weak_ptr:是一种弱引用,用于解决shared_ptr的循环引用问题。weak_ptr不会增加资源的引用计数,可以通过lock()方法获取一个shared_ptr来访问资源,但是当资源已被释放时,lock()会返回一个空的shared_ptr。
智能指针与普通指针的区别在于智能指针实际上是对普通指针加了一层封装机制,负责自动释放所指的对象,以方便地管理对象的生命周期。智能指针的使用可以避免手动释放内存的繁琐操作,提高代码的安全性和可维护性。
c++中智能指针的使用
C++中的智能指针是一种特殊的指针,它能够自动管理内存,避免内存泄漏和野指针的问题。C++11标准引入了两种智能指针,分别是std::unique_ptr和std::shared_ptr。
std::unique_ptr是一种独占式的智能指针,它拥有对其指向对象的唯一所有权,不能被复制,只能通过移动来转移所有权。使用std::unique_ptr时,可以通过std::make_unique函数创建一个对象,并将其指针交给unique_ptr,如下所示:
```
#include <memory>
int main()
{
std::unique_ptr<int> uptr = std::make_unique<int>(42);
return 0;
}
```
std::shared_ptr是一种共享式的智能指针,可以拥有多个指向同一个对象的智能指针,通过引用计数来管理内存。使用std::shared_ptr时,可以通过std::make_shared函数创建一个对象,并将其指针交给shared_ptr,如下所示:
```
#include <memory>
int main()
{
std::shared_ptr<int> sptr = std::make_shared<int>(42);
return 0;
}
```
需要注意的是,使用智能指针时应该避免循环引用,即两个或多个对象之间相互持有对方的shared_ptr,这会导致内存泄漏。可以使用weak_ptr来避免循环引用的问题。