std::make_shared和std::shared_ptr的作用,以及如何配套使用
时间: 2023-07-28 22:10:07 浏览: 138
std::make_shared和std::shared_ptr都是C++11中引入的智能指针相关的类和函数。
std::shared_ptr是一个智能指针类,用于管理动态分配的对象。当一个对象被std::shared_ptr管理时,它会自动跟踪它的引用计数,并在引用计数变为0时自动释放对象。可以使用std::shared_ptr的构造函数来创建一个新的std::shared_ptr对象,也可以使用std::make_shared函数来创建一个新的std::shared_ptr对象,它会在内存中分配对象并返回一个指向该对象的std::shared_ptr。
std::make_shared是一个函数模板,用于创建一个std::shared_ptr对象,该对象管理一个动态分配的对象。它接受一个可变参数列表,用于传递给对象的构造函数。std::make_shared函数会在内存中分配对象,并返回一个std::shared_ptr指向该对象。使用std::make_shared可以避免两次内存分配,一次是为对象分配内存,另一次是为std::shared_ptr分配内存。
使用std::make_shared和std::shared_ptr可以配套使用,例如:
```
// 创建一个std::shared_ptr对象,管理一个动态分配的int类型对象
std::shared_ptr<int> p1(new int(42));
// 使用std::make_shared创建一个std::shared_ptr对象,管理一个动态分配的int类型对象
std::shared_ptr<int> p2 = std::make_shared<int>(42);
// 创建一个std::shared_ptr对象,管理一个动态分配的对象数组
std::shared_ptr<int> p3(new int[10], std::default_delete<int[]>());
// 使用std::make_shared创建一个std::shared_ptr对象,管理一个动态分配的对象数组
std::shared_ptr<int> p4 = std::make_shared<int[]>(10);
```
值得注意的是,使用std::make_shared创建std::shared_ptr对象时,如果对象的构造函数抛出异常,那么std::shared_ptr会自动释放内存,而不会造成内存泄漏。而使用std::shared_ptr的构造函数创建std::shared_ptr对象时,如果对象的构造函数抛出异常,那么std::shared_ptr不会自动释放内存,需要手动释放。
阅读全文