Tal*_*Tal 3 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);
}
Run Code Online (Sandbox Code Playgroud)
是的,这是正确的.但为什么不写只:
sharedPtr createPtr()
{
return sharePtr(new std::vector<char>);
}
void test()
{
sharePtr p = createPtr();
}
Run Code Online (Sandbox Code Playgroud)
?这可能比您的版本更快,并且使用支持移动语义的编译器更快.
它也建议使用make_shared而不是直接new:
sharedPtr createPtr()
{
return make_shared<std::vector<char>>();
}
Run Code Online (Sandbox Code Playgroud)
因为它可以避免参考计数器的内存分配.