std::make_shared和std::shared_ptr的区别
时间: 2023-11-09 09:17:23 浏览: 112
std::make_shared和std::shared_ptr是C++中管理动态分配的共享指针的两个常用工具。
std::shared_ptr是C++11引入的智能指针,用于在堆上分配资源,并且可以在多个指针之间共享该资源。它采用引用计数的方式来管理资源的生命周期。当最后一个指向资源的shared_ptr被销毁时,资源会被自动释放。
std::make_shared是一个模板函数,用于创建shared_ptr对象并初始化它指向的资源。它接受可变数量的参数,用于构造指向的对象。make_shared会在堆上分配内存来同时保存对象和引用计数,这样可以提高性能和内存使用效率。
区别在于:
1. 创建方式不同:std::shared_ptr可以通过直接使用new关键字创建,也可以通过std::make_shared来创建。而std::make_shared只能通过模板函数来创建。
2. 性能和内存使用:由于std::make_shared在堆上为对象和引用计数分配内存,可以减少内存碎片和提高性能。
例如,使用std::make_shared创建shared_ptr对象可以这样写:
```cpp
std::shared_ptr<int> ptr = std::make_shared<int>(42);
```
而直接使用std::shared_ptr创建则需要这样写:
```cpp
std::shared_ptr<int> ptr(new int(42));
```
总结起来,使用std::make_shared更加简洁和高效,推荐在创建shared_ptr对象时使用它。
阅读全文