创建 shared_ptr
时间: 2023-12-06 10:36:06 浏览: 87
创建 shared_ptr 的方法如下所示:
```C++
#include <iostream>
#include <memory>
int main() {
// 创建一个 shared_ptr 对象,指向一个 int 类型的变量
std::shared_ptr<int> ptr1(new int(10));
// 创建一个 shared_ptr 对象,指向一个自定义类型的对象
std::shared_ptr<std::string> ptr2(new std::string("hello world"));
// 创建一个 shared_ptr 对象,指向一个数组
std::shared_ptr<int[]> ptr3(new int[10]);
return 0;
}
```
在上述代码中,我们使用了 `std::shared_ptr` 模板类来创建 shared_ptr 对象。其中,`ptr1` 指向一个 int 类型的变量,`ptr2` 指向一个自定义类型的对象,`ptr3` 指向一个数组。需要注意的是,当我们使用 shared_ptr 来管理数组时,需要在模板参数中指定数组的类型,例如 `std::shared_ptr<int[]>`。
相关问题
创建 shared_ptr 时需要注意什么
当创建 shared_ptr 时,需要注意以下几点:
1. shared_ptr 是通过引用计数来管理资源的智能指针,因此需要确保计数器的正确性,避免资源的重复释放或者过早释放;
2. 在使用 shared_ptr 时,应该优先使用 make_shared 函数来创建 shared_ptr,避免手动管理资源导致的错误;
3. 需要注意循环引用的问题,即 A 持有 B 的 shared_ptr,同时 B 持有 A 的 shared_ptr,这样会导致资源无法正确释放,应该避免这种情况的出现。
为什么不能通过裸指针创建shared_ptr对象
在C++中,`std::shared_ptr`是一种智能指针,用于管理动态分配的对象,并自动控制内存的释放。它内部有一个引用计数,每次`shared_ptr`增加对所指向对象的引用时,计数会加一;当引用计数降为零时,对象就会被销毁。
裸指针,即未包装在特定容器中的函数返回值或本地变量存储的指针,不具备引用计数的功能。如果直接尝试通过裸指针创建`shared_ptr`,`shared_ptr`无法跟踪有多少份引用存在,也就无法正确地管理对象的生命周期。因此,你需要通过`make_shared`工厂函数或者`shared_ptr`的构造函数来初始化,确保其能关联到正确的对象并开始计数。
以下是错误的做法:
```cpp
int* rawPointer = new int; // 裸指针
// 错误:这不会创建一个共享所有权的指针
std::shared_ptr<int> sharedBadly = rawPointer; // shared_ptr 没有正确关联对象
// 正确做法:
std::shared_ptr<int> sharedCorrectly = std::make_shared<int>(42); // 使用 make_shared 创建
```
阅读全文