Coplien的表单告诉您重载运算符=
。如果您的课程没有const
属性,那么这很容易,但是当它没有这个属性时会更复杂。
class MyClass {
public:
MyClass( MyClass const & src );
MyClass( void );
MyClass( name, age, leggedness );
~MyClass( void );
// Member functions etc...
private:
std::string const _name;
int const _number_of_leg;
int _age;
// other const and non-const attributes...
}
为这类课程重载操作符=
的最佳方法是什么?保持和不保留来自源的const
属性值。
答案 0 :(得分:0)
这取决于成员和赋值运算符的含义。
为什么你的成员首先被声明为const?
如果所有类都应该具有相同的值,那么将其设为val items = listOf("apple", "banana", "kiwifruit")
val appleIndex = items.indexOf("apple") // 0
val lastAppleIndex = items.lastIndexOf("apple") // 0
val bananaIndex = items.indexOf("banana") // 1
val orangeIndex = items.indexOf("orange") // -1
将是一种更好的方法(使用更少的内存,因为它只有一个副本)。
如果它不应该改变,这包括它不应该通过分配给其他对象来改变。因此赋值运算符不应该触及它们。但是,这不会创建一个完美的对象副本,这可能不是你想要的最好的东西,也可能是最糟糕的混乱。
在这种情况下,一种选择是禁止转让。