c++ - 将共享指针还是原始指针传递给函数

标签 c++ performance pointers memory

情况
我使用的某些第三方API可与原始指针一起使用,但是我的客户端代码中都有智能指针。
问题
当我想围绕API编写包装函数时,我遇到一个问题:是将共享指针还是其原始指针作为参数传递给下面。
像这样:
智能指针版本


// my wrapper

void MyWrapper(const std::shared_ptr<MyClassA>& pInObj, std::shared_ptr<MyClassB>& out_pOutObj) {

    ThirdParty_DoStuff(pInObj.get(), out_pOutObj.get());
}

// my client code

auto inObj = std::make_shared<MyClassA>();
auto outObj = std::make_shared<MyClassB>();

MyWrapper(inObj, outObj);

原始指针版本

// wrapper

void MyWrapper(MyClassA* pInObj, MyClassB* out_pOutObj) {

    assert(pInObj && out_pOutObj);
    ThirdParty_DoStuff(pInObj, out_pOutObj);
}

// client code

auto inObj = std::make_shared<MyClassA>();
auto outObj = std::make_shared<MyClassB>();

MyWrapper(inObj.get(), outObj.get());


  • 就性能和内存安全而言,哪种方法更好?
  • 两种方法之间的引用计数会略有不同吗?

  • 我认为,如果某天该功能必须与其他类型的内存管理一起使用,则第二个版本更可重用。

    最佳答案

    我建议采用以下方法来查看类似以下代码的内容:
    enter image description here
    还有其他一些选项,例如weak_ptr,但是为此,可能不值得一看。
    因此,在您的示例中,我们可以看到ThirdParty_DoStuff不拥有所有权,因此我们也不会拥有所有权,因此您可以根据参数是否为必需分别在引用和指针之间进行选择。

    关于c++ - 将共享指针还是原始指针传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65035189/

    相关文章:

    c++ - C memcpy 以小字节序复制字节

    objective-c - 如何在 C 中使用一元指针运算符 (*)?

    c++全局函数与根据内存的数据成员函数

    c++ - 创建由共享指针 vector 的元素指向的对象的拷贝

    c - 如何使用c中的指针将两个矩阵相加?

    python - 如何优化大文件的读取和处理?

    python - numpy np.array 与 np.matrix(性能)

    C++:你在使用 Loki 还是 Boost 作为仿函数?

    使用 unique_ptr 的多态类的 C++ static_cast 和 dynamic_cast

    python - numba 中的整数数组