std::shared_ptr创建方式

249 阅读2分钟

std::shared_ptr 是 C++ 标准库中的智能指针,用于管理动态分配的资源,实现了共享所有权的语义。它可以让多个 std::shared_ptr 实例共同管理同一个对象,从而避免了手动管理内存的复杂性和潜在的内存泄漏问题。下面是几种创建 std::shared_ptr 的方式:

  1. 使用 std::make_shared 创建

    auto ptr = std::make_shared<SomeType>(constructor_arguments);
    

    这是推荐的方式,它可以在一次内存分配中同时创建对象和管理对象的引用计数。SomeType 是要分配的对象类型,constructor_arguments 是传递给对象构造函数的参数。这种方式更加简洁和安全,因为它避免了手动分配内存和显式调用 new 操作符。

  2. 使用 std::shared_ptr 的构造函数

    auto ptr = std::shared_ptr<SomeType>(new SomeType(constructor_arguments));
    

    这种方式通过 new 操作符显式地创建对象,并将其传递给 std::shared_ptr 的构造函数。这种方式比较繁琐,而且如果 new 操作符分配失败,可能会抛出 std::bad_alloc 异常,需要额外的异常处理代码。

  3. 使用空 std::shared_ptr 初始化

    std::shared_ptr<SomeType> ptr;
    

    这种方式创建了一个空的 std::shared_ptr,它不管理任何对象。可以在后续代码中通过赋值或 reset() 方法来将其指向实际的对象。

  4. 使用其他 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,因为它更加安全和高效。