【发布时间】:2018-03-21 12:35:59
【问题描述】:
我有一个包含引用的类,例如:
class A {
A(B &b) : b(b) {} // constructor
B &b;
}
有时 b 必须是只读的,有时它是可写的。当我创建一个const A a(b); 对象时,很明显我想将其中的数据保护为const。
但是 - 不小心 - 制作对象的非常量副本很容易,这会使其中的数据易受攻击。
const A a(b); // b object protected here
A a_non_const(a);
a_non_const.b.non_const_function(...); // b not protected now
我认为我应该以某种方式阻止对象在 const 时的副本,如下所示:
const A a(b);
const A a2(a); // OK!
A a_non_const(a); // Compiler error
这可能吗?
【问题讨论】:
-
进入封装。
-
“有时 b 必须是只读的,有时它是可写的。” 你所有的问题都源于这种奇怪的二元性。我建议为您的课程选择一组语义,而不是两组。
-
这就是为什么你有像 private 或 public 这样的关键字。然后你就可以编写访问器/修饰符来做任何你想做的事情。
-
@BillKotsias:我同意糟糕/有问题的设计并不少见。你是否改进它当然是你的电话
-
没问题-祝你好运!
标签: c++ constants pass-by-reference copy-constructor default-copy-constructor