std::make_shared
是 C++11 引入的一个函数模板,用于创建 std::shared_ptr
智能指针。它简化了 std::shared_ptr
的创建过程,并且通常比直接使用 std::shared_ptr
构造函数更高效,因为它一次分配内存就可以同时存储对象和控制块。
shared_ptr
实例共享同一个对象的所有权。当最后一个拥有该对象的 shared_ptr
被销毁时,对象会被自动删除。std::shared_ptr
实例。它内部进行了优化,通常只进行一次内存分配。std::make_shared
通常比直接使用 std::shared_ptr
构造函数更高效,因为它可以一次性分配足够的内存来存储对象和控制块。std::make_shared
可以更容易地编写异常安全的代码,因为它减少了显式使用 new
的需要。std::make_shared
提供了一种简洁的方式来创建 std::shared_ptr
。std::make_shared
是一个模板函数,可以用于任何可以通过 new
创建的对象类型。
std::shared_ptr
并且想要优化性能时。new
和 delete
时。#include <iostream>
#include <memory>
class MyClass {
public:
MyClass(int value) : data(value) {}
void print() const { std::cout << "Data: " << data << std::endl; }
private:
int data;
};
int main() {
// 使用 std::make_shared 创建一个 MyClass 的 shared_ptr
auto ptr = std::make_shared<MyClass>(42);
// 使用 shared_ptr
ptr->print();
return 0;
}
std::make_shared
比直接使用 std::shared_ptr
构造函数慢?这通常不是 std::make_shared
的问题,而是由于以下原因:
std::make_shared
进行了一次内存分配,这个分配也可能比多次小分配要慢。std::unique_ptr
。std::make_shared
不支持自定义删除器,因为它需要在创建时知道控制块的大小。std::shared_ptr
构造函数。以上就是关于 std::make_shared
的基础概念、优势、类型、应用场景以及可能遇到的问题和解决方法。
领取专属 10元无门槛券
手把手带您无忧上云