【发布时间】:2020-01-27 20:57:51
【问题描述】:
假设我有一个B 类型的对象,其中包含A 类型的对象。而A 包含一个无法更改的整数。来自B A 由非常量引用返回(因为它包含一些有用的方法):
class A {
private:
int i;
public:
A(int i) : i(i) {};
void doSomethingNonConst() {}
int getInt() {
return i;
}
}
class B {
public:
A& getA();
}
但是有一个问题:我可以执行以下操作:getA() = A(5); 这当然会更改无法更改的整数。
我的解决方案是使用operator=,即仅在目标和源的整数相等时复制,否则抛出异常:
A& operator=(const A& a) {
if (a.i == i) {
//do copy
} else
//throw an exception
}
这是好的设计解决方案吗?如果不是,那我怎样才能做得更好?也许,最好复制所有内容,但在外部代码中添加一些整数相等检查?
【问题讨论】:
-
@Yksisarvinen 你是个天才。谢谢
-
这是一个糟糕的设计,因为错误只在运行时出现。使用 const 类型会在编译时出现,并且更可取。为什么不将
int i设为常量?
标签: c++ architecture