【发布时间】:2009-09-22 02:20:33
【问题描述】:
出于某种原因,我不得不为我的类同时提供一个复制构造函数和一个 operator=。如果我定义了一个复制 ctor,我想我不需要 operator=,但 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;
}
只是出于好奇,没有办法切换它,以便大部分代码在复制 ctor 中,operator= 以某种方式利用它?我试过return Fixture(f);,但它不喜欢那样。
看来我需要更清楚地说明,复制构造函数和赋值运算符已被我继承的类隐式禁用。为什么?因为它是一个不应该单独实例化的抽象基类。然而,这个类是独立的。
【问题讨论】:
-
您的新代码无休止地递归。它只是再次调用
operator=。不好。 -
@litb:哦……哈哈。哎呀:$
-
别担心!我的第一个答案当然也包含同样的问题,只是被隐藏在一个 std::swap 调用中。史诗般的失败 xD
-
您是否注意到所选答案的票数最少。您意识到这是有原因的!
-
@Martin:我认为原因是因为当我将其标记为答案时它仍然是一个新答案。从那以后已经有好几个小时了,而且似乎不太受欢迎。我想我将对此进行更多探索。
标签: c++ operator-overloading copy-constructor