我需要创建一个返回已分配的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);
}
答案 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>>();
}
因为它可以避免引用计数器的内存分配。