在函数中分配shared_ptr

时间:2010-12-07 12:46:30

标签: 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);
}

1 个答案:

答案 0 :(得分:5)

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

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

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

?这可能比您的版本更快,并且使用支持移动语义的编译器甚至更快。

还建议使用make_shared代替直接new

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

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