shared_ptr make初始化
时间: 2023-09-07 15:12:38 浏览: 67
`std::shared_ptr` 是 C++11 中的一个智能指针,它允许多个指针共享同一个对象,而在最后一个指针被销毁时,对象也会被销毁。`std::make_shared` 是一个函数模板,可以用来创建动态分配的对象并返回一个 `std::shared_ptr` 智能指针。
`std::make_shared` 可以通过以下方式进行初始化:
```cpp
auto ptr = std::make_shared<T>(args...);
```
其中,`T` 是指要分配的对象类型,`args...` 是传递给 `T` 构造函数的参数列表。
例如,如果要创建一个 `Person` 类型的对象并返回一个 `std::shared_ptr` 智能指针,可以这样写:
```cpp
auto ptr = std::make_shared<Person>("Alice", 25);
```
这将创建一个名为 `Alice` 年龄为 `25` 的 `Person` 对象,并返回一个指向该对象的 `std::shared_ptr` 智能指针。
相关问题
std::shared_ptr 如何初始化
std::shared_ptr 可以通过以下方式进行初始化:
1. 使用 std::make_shared 函数进行初始化,例如:
```
std::shared_ptr<int> ptr = std::make_shared<int>(42);
```
2. 使用 new 运算符进行初始化,例如:
```
std::shared_ptr<int> ptr(new int(42));
```
3. 使用空指针进行初始化,例如:
```
std::shared_ptr<int> ptr(nullptr);
```
需要注意的是,使用 new 运算符进行初始化时,需要使用 std::shared_ptr 的构造函数进行初始化,例如:
```
std::shared_ptr<int> ptr(new int(42), std::default_delete<int>());
```
这样可以指定 std::shared_ptr 在释放资源时使用的删除器。
shared_ptr初始化
shared_ptr的初始化可以通过以下几种方式进行:
1. 通过直接调用构造函数进行初始化,例如:std::shared_ptr<T> ptr(new T);
引用
2. 在C++11中,当使用shared_ptr管理动态数组时,需要指定删除器,因为std::shared_ptr的默认删除器不支持数组对象。具体的处理代码如下:
std::shared_ptr<T> ptr(new T[size], std::default_delete<T[]>());
引用
3. 另外,我们还可以自己封装一个make_shared_array方法来让shared_ptr支持数组。这个方法会返回一个匿名的shared_ptr对象。具体的代码如下:
template <typename T>
std::shared_ptr<T> make_shared_array(size_t size) {
return std::shared_ptr<T>(new T[size], std::default_delete<T[]>());
}
引用<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* *3* [C++——智能指针——auto_ptr、shared_ptr、unique_ptr](https://blog.csdn.net/asdasdde/article/details/116267321)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]
阅读全文