new 给 shared_ptr
时间: 2023-07-18 16:43:12 浏览: 103
使用 `new` 给 `shared_ptr` 赋值需要按照以下步骤进行:
1. 首先定义一个 `shared_ptr` 对象,例如:
```
#include <memory>
std::shared_ptr<int> ptr;
```
2. 然后使用 `new` 运算符为其分配内存并初始化:
```
ptr = std::shared_ptr<int>(new int(5));
```
这里我们使用了 `std::shared_ptr` 的构造函数,将 `new int(5)` 返回的指针作为参数传递给了构造函数。这样就创建了一个 `int` 类型的对象,并将其封装到了一个 `shared_ptr` 对象中。
3. 使用 `shared_ptr` 对象时,可以像使用普通指针一样进行操作:
```
std::cout << *ptr << std::endl; // 输出 5
```
注意,`shared_ptr` 对象在作用域结束时会自动释放其所管理的内存,因此不需要手动释放内存。
使用 `new` 运算符给 `shared_ptr` 赋值时,需要注意以下几点:
1. 不要使用 `delete` 运算符手动释放 `shared_ptr` 对象所管理的内存。
2. 在使用 `shared_ptr` 操作所管理的内存时,不要使用普通指针,而应该使用 `shared_ptr` 对象自带的 `get()` 方法获取其所管理的指针。
```
int* p = ptr.get(); // 获取指针
std::cout << *p << std::endl; // 输出 5
```
注意,`shared_ptr` 对象被销毁时,其所管理的内存也将被自动释放,因此不要再使用 `p` 指针来操作已经被释放的内存。
3. 在使用 `new` 运算符给 `shared_ptr` 赋值时,要注意异常安全性。为了保证程序的安全性,应该使用 `make_shared` 函数来创建 `shared_ptr` 对象:
```
ptr = std::make_shared<int>(5); // 与上面的赋值等价
```
`make_shared` 函数可以保证在分配内存和初始化对象时是原子操作,从而避免了一些异常安全性问题。
阅读全文