std::shared_ptr 是 C++ 标准库中的智能指针,用于管理动态分配的资源,实现了共享所有权的语义。它可以让多个 std::shared_ptr 实例共同管理同一个对象,从而避免了手动管理内存的复杂性和潜在的内存泄漏问题。下面是几种创建 std::shared_ptr 的方式:
-
使用
std::make_shared创建auto ptr = std::make_shared<SomeType>(constructor_arguments);这是推荐的方式,它可以在一次内存分配中同时创建对象和管理对象的引用计数。
SomeType是要分配的对象类型,constructor_arguments是传递给对象构造函数的参数。这种方式更加简洁和安全,因为它避免了手动分配内存和显式调用new操作符。 -
使用
std::shared_ptr的构造函数auto ptr = std::shared_ptr<SomeType>(new SomeType(constructor_arguments));这种方式通过
new操作符显式地创建对象,并将其传递给std::shared_ptr的构造函数。这种方式比较繁琐,而且如果new操作符分配失败,可能会抛出std::bad_alloc异常,需要额外的异常处理代码。 -
使用空
std::shared_ptr初始化std::shared_ptr<SomeType> ptr;这种方式创建了一个空的
std::shared_ptr,它不管理任何对象。可以在后续代码中通过赋值或reset()方法来将其指向实际的对象。 -
使用其他
std::shared_ptr初始化std::shared_ptr<SomeType> ptr1 = std::make_shared<SomeType>(constructor_arguments); std::shared_ptr<SomeType> ptr2 = ptr1;可以通过复制或移动构造函数来初始化另一个
std::shared_ptr,从而共享同一个对象。这种方式可以在多个地方使用同一个对象,而无需手动管理对象的生命周期。
这些是常见的创建 std::shared_ptr 的方式,每种方式都有其特点和适用场景。在实际编程中,推荐使用 std::make_shared 来创建 std::shared_ptr,因为它更加安全和高效。