make_shared
时间: 2023-09-04 11:09:41 浏览: 52
`make_shared` 是 C++11 标准库中的一个函数模板,用于创建一个 shared_ptr 对象并初始化其所持有的对象。
函数签名如下:
```c++
template< class T, class... Args >
constexpr shared_ptr<T> make_shared( Args&&... args );
```
其中,T 是 shared_ptr 所持有的对象类型,Args 是 T 的构造函数参数类型。
使用 `make_shared` 可以避免手动创建指向对象和 shared_ptr 对象的代码,从而避免内存泄漏和异常安全问题。此外,由于 `make_shared` 会在一块连续的内存中分配对象和控制块,因此可以提高性能和减少内存碎片。
相关问题
C++ make_shared
make_shared是C++中的一个函数模板,用于创建一个指向动态分配的对象的std::shared_ptr智能指针。它可以在堆上分配内存并初始化对象。
以下是make_shared函数的语法:
```cpp
std::shared_ptr<T> make_shared<T>(Args&&... args);
```
其中,T是要分配的对象的类型,Args是传递给对象构造函数的参数。
下面是一个示例,演示了如何使用make_shared函数创建一个指向int类型对象的shared_ptr:
```cpp
std::shared_ptr<int> ptr = std::make_shared<int>(42);
```
这将创建一个指向值为42的int对象的shared_ptr。
需要注意的是,make_shared函数可以避免显式地使用new运算符来分配内存,并且可以更高效地管理内存,因为它将对象和控制块(用于跟踪引用计数等信息)一起分配在一块连续的内存中。
c++ make_shared
在C++11中引入了智能指针,并且提供了模板函数std::make_shared,可以返回一个指定类型的std::shared_ptr。相比于直接使用std::shared_ptr的构造函数,使用make_shared初始化有以下几个好处。
首先,使用make_shared可以减少内存分配次数。当我们使用std::shared_ptr的构造函数时,首先会为对象分配内存,然后还要为控制块分配内存。而使用make_shared时,内存分配只需要一次,同时对象和控制块都会被放在同一个内存块中,这样可以提高内存使用效率。
其次,使用make_shared可以减少内存泄漏的可能性。当我们使用std::shared_ptr的构造函数时,如果在对象被创建后但尚未分配到std::shared_ptr中之前发生异常,那么可能会导致内存泄漏。而使用make_shared时,对象和控制块是同时分配的,所以不会出现这个问题。
此外,使用make_shared可以提高性能。由于对象和控制块在同一个内存块中,可以减少内存访问次数,从而提高程序的执行速度。
综上所述,使用make_shared来初始化std::shared_ptr可以减少内存分配次数、减少内存泄漏的可能性,并提高程序的性能。所以在C++中,推荐尽量使用make_shared来初始化std::shared_ptr。