shared_ptr API
时间: 2023-07-18 08:13:20 浏览: 75
`shared_ptr`是C++11中引入的智能指针,它可以用于在多个地方共享同一个对象,并且能够自动管理对象的内存释放。以下是常用的`shared_ptr` API:
- `shared_ptr<T>`:定义一个类型为`T`的`shared_ptr`。
- `make_shared<T>(args...)`:创建一个类型为`T`的对象,并返回指向该对象的`shared_ptr`。
- `shared_ptr<T>(const shared_ptr& r)`:创建一个指向`r`所指向对象的新的`shared_ptr`。
- `shared_ptr<T>(shared_ptr&& r)`:创建一个指向`r`所指向对象的新的`shared_ptr`,并将`r`的指针置为空。
- `operator=(const shared_ptr& r)`:将`r`所指向的对象赋值给当前`shared_ptr`,并增加对象的引用计数。
- `operator=(shared_ptr&& r)`:将`r`所指向的对象赋值给当前`shared_ptr`,并将`r`的指针置为空。
- `operator*()`:返回指向`shared_ptr`所指向对象的引用。
- `operator->()`:返回指向`shared_ptr`所指向对象的指针。
- `get()`:返回指向`shared_ptr`所指向对象的指针。
- `use_count()`:返回指向`shared_ptr`所指向对象的所有`shared_ptr`的数目。
- `unique()`:返回`shared_ptr`是否是该对象的唯一所有者。
- `reset()`:释放当前`shared_ptr`所指向的对象,并将当前`shared_ptr`置为空。
- `reset(T* ptr)`:释放当前`shared_ptr`所指向的对象,将当前`shared_ptr`指向`ptr`指向的对象,并增加该对象的引用计数。
- `swap(shared_ptr& r)`:交换当前`shared_ptr`和`r`所指向的对象。
除了上述API之外,`shared_ptr`还支持自定义删除器,可以在创建`shared_ptr`对象时指定删除器,例如:
```c++
void myDeleter(MyClass* p) {
// 自定义删除器的实现代码
delete p;
}
int main() {
std::shared_ptr<MyClass> ptr(new MyClass, myDeleter);
// ...
return 0;
}
```
在上述代码中,我们定义了一个名为`myDeleter`的自定义删除器,使用`new`创建了一个`MyClass`对象,并将该对象和删除器一起传递给`shared_ptr`的构造函数,这样当`shared_ptr`的引用计数变为0时,就会调用`myDeleter`来释放对象的内存。
阅读全文