【发布时间】:2016-11-19 15:18:03
【问题描述】:
我有办法
structA
{
shared_ptr<B> m_b;
// 2 options to set m_b
void setB1(shared_ptr<B> b)
{
m_b = move(b);
}
void setB2(shared_ptr<B> const&b)
{
m_b = b;
}
};
哪个性能更好?如果我将setB1 称为setB1(b) 而不是setB1(move(b)),它们都会复制。我更关心它在 b 可以被无效并且 b 只能被复制时的性能。
我在 VC2015 上的测试答案:
setB1 比 setB2 快
- 左值 b 增加 30%
- 右值 b 降低 8%
【问题讨论】:
-
大概您打算将
m_b的类型设置为shared_ptr<B>而不仅仅是B。 -
这两个做不同的事情:复制创建新的
shared_ptr指向同一个东西,移动会使原来的shared_ptr无效。您应该考虑自己的目标,而不是绩效。 -
@GingerPlusPlus :移动会使本地
b对象无效,该对象在函数退出时被销毁。 -
@GingerPlusPlus 如果我将
setB1称为setB1(b)而不是setB1(move(b)),他们都会进行复制。我更关心它的性能,例如当 b 可以无效时。
标签: c++ c++11 std shared-ptr