这个右值签名模式有意义吗?

Does this rvalue signature pattern make sense?

本文关键字:有意义 签名模式      更新时间:2023-10-16

假设我通常需要对象的副本,即使我得到了引用。假设这些签名都在一个类范围内,这样就可以看到它们。这样做的优点和缺点是什么,而不是只有一个push(const RingType&aData)。如果我的对象(RingType)只有基本类型,或者是一个基本类型,那么模式可能不会给我带来任何东西,但在这种情况下它会损害性能吗?我觉得这种模式很好,因为如果我得到一个引用,我复制它,并把它作为一个右值转发,如果我得到一个右值,它就会进入右值签名。想法吗?我在这里关注的是性能。

void push(const RingType& aData) { 
  push(RingType(aData));
}
void push(RingType&& aData) {
//process aData
}

这不是很有用:

  • 如果不需要副本,通过引用
  • 传递
  • 如果你需要一个副本,传递值

在后一种情况下,复制构造函数或移动构造函数将根据它们的可用性被调用,以获得最佳性能。