【发布时间】:2015-09-20 14:58:03
【问题描述】:
我确实将类成员的 c++ 访问器编写为
SomeClass const& x() const { return m_x; }
似乎在 c# 中这种类型的唯一保护是用私有(或未定义)集定义属性。但这只能防止分配而不是防止对某些类状态的操纵。
旁注:c++ 允许通过 const 指针删除 m_x - 恕我直言,这简直是对标准体的惊人疏忽。
【问题讨论】:
-
“恕我直言,这简直是对标准机构的惊人监督。” -。不,这不对。甚至
const对象也需要被销毁。否则,您将如何处理void f() { Foo const foo; }之类的事情? -
@Christian - 我强烈反对:编译器足够聪明,可以将堆栈和类成员对象的破坏与对删除的显式调用区分开来,没有必要再让这扇门敞开。
-
但是通过
const指针禁止删除有什么好处呢?这将与语言的其余部分完全不一致。如果您对此问题感兴趣,请谷歌“删除指针常量”并查看所有 Stackoverflow 问题和答案。即使你不同意其他人,这也算不上“疏忽”。 -
好吧,但是删除
const指针并不是崩溃。如果它因const指针而崩溃,那么它也会因非const指针而崩溃... -
重点是:改变一个对象的状态和销毁一个对象是有很大区别的。销毁一个对象不考虑改变它的状态。不是 C++,也不是我知道的任何其他编程语言。