【发布时间】:2021-11-18 23:15:09
【问题描述】:
我想知道下面的 std::shared_ptr 的用法是否正确。
我想要对最初创建的指针做的就是将它添加到class A 上的向量中,
稍后会检索到
class A
{
public:
void AddToVec(std::shared_ptr<B> b)
{
myVec_.push_back(b);
}
std::vector<std::shared_ptr<B>> GetVec()
{
return myVec_;
}
private:
std::vector<std::shared_ptr<B>> myVec_;
}
然后在main上,创建一个指针并通过如下方式传递
int main()
{
A a;
std::shared_ptr<B> ptr = std::make_shared<B>();
a.AddToVec(std::move(ptr));
}
-
std::move在 main 函数中的用法是否正确? - 可以简单地在
main上创建std::shared_ptr并使用AddToVec函数移动所有权吗?
【问题讨论】:
-
std::move()不是必需的。 -
按值返回 shared_prr 的向量相当昂贵。
-
@πάνταῥεῖ 有必要吗?编译成功?是的,副本就足够了,但是当我们应用
move和不应用时,它只是做不同的事情。 -
@Fureeish 可以使用
void AddToVec(std::shared_ptr<B>&& b)进行优化吗? -
@πάνταῥεῖ - 但这会使移动变得必要。值参数是任何值类别的接收器。
标签: c++ c++11 move shared-ptr smart-pointers