std::swap()在排序甚至分配期间被许多std容器(例如std::list和std::vector)使用.
但是std实现swap()非常普遍,而且对于自定义类型来说效率很低.
因此,通过std::swap()使用自定义类型特定实现进行重载可以获得效率.但是如何实现它以便std容器使用它?
复制构造函数的这种实现有一些缺点吗?
Foo::Foo(const Foo& i_foo)
{
*this = i_foo;
}
Run Code Online (Sandbox Code Playgroud)
我记得,在某些书中建议从赋值运算符调用复制构造函数并使用众所周知的交换技巧,但我不记得了,为什么......
由于某种原因,我不得不为我的班级提供复制构造函数和operator =.operator=如果我定义了一个副本ctor,我想我不需要,但是QList想要一个.把它放在一边,我讨厌代码重复,所以这样做有什么不对吗?
Fixture::Fixture(const Fixture& f) {
*this = f;
}
Fixture& Fixture::operator=(const Fixture& f) {
m_shape = f.m_shape;
m_friction = f.m_friction;
m_restitution = f.m_restitution;
m_density = f.m_density;
m_isSensor = f.m_isSensor;
return *this;
}
Run Code Online (Sandbox Code Playgroud)
只是出于好奇,没有办法切换它,以便大部分代码都在复制文件中并operator=以某种方式利用它?我尝试过,return Fixture(f);但不喜欢那样.
看来我需要更清楚地说明复制构造函数和赋值运算符已被我继承的类隐式禁用.为什么?因为它是一个抽象的基类,不应该自己实例化.然而,这门课程是独立的.