c++ - 在函数中分配 shared_ptr

标签 c++ smart-pointers

我需要创建一个返回分配的 shared_ptr 变量的函数。这是正确的方法吗?

typedef boost::shared_ptr<std::vector<char> > sharePtr;

void createPtr(sharePtr &p)
{
    p = sharePtr(new std::vector<char>);
}

void test()
{
     sharePtr p;
     createPtr(p);
}

最佳答案

是的,这是正确的。但为什么不只写:

sharedPtr createPtr()
{
    return sharePtr(new std::vector<char>);
}

void test()
{
     sharePtr p = createPtr();
}

?这可能比您的版本更快,如果使用支持移动语义的编译器,速度会更快。

还推荐使用make_shared代替直接new:

sharedPtr createPtr()
{
    return make_shared<std::vector<char>>();
}

因为它可以避免为引用计数器分配内存。

关于c++ - 在函数中分配 shared_ptr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4376708/

相关文章:

c++ - shared_ptr 在哪里?

c++ - 哨兵 QWidget 是个好主意吗(在创建和填充布局时防止内存泄漏)?

c++ - 在 C++ 中分配对变量的引用

c++ - 在 C++ 中通过指针和引用传递 vector

c++ - 为什么我可以将可调用目标存储在与类型不匹配的 std::function 中

c++ - 将 vector<shared_ptr<Derived>> 传递给需要 vector<shared_ptr<Base>> 的函数

c++ - 复制构造函数中的 "Template typedef"不起作用

reference - 如何从 Rc<RefCell<A>> 获取 &A 引用?

c++ - 对象的后增量与前增量运算符的速度

c++ - 如何实例化一个全局智能指针变量?