所以这就是我所知道的:
- 明智的做法是不要直接在您的 API 中公开您的 ivars;而是使用访问器
const
指向非对象的指针const
仅意味着您可以更改对象,但不能重定向指针指向的位置
这是我的情况:
我有一些相关的课程。我想创建一个简单的类,通过composition将这些组合成一个逻辑接口。我的每个封闭类在其 API 中都已经有了公共和私有的区别,所以我不介意将它们直接暴露给我父类的用户。这意味着为这些 ivars 编写访问器对我来说太过分了,因为这些类已经管理了哪些是公共的,哪些不是。但是,我不希望用户更改包含在这个组合父类中的实际对象。
所以我能想到的唯一方法是使用const
指向这些对象的指针,例如:
class Parent{
public:
EnclosedClass1*const ec1; //users can enjoy the public API of EnclosedClass
EnclosedClass2*const ec2;
void convenienceMethod(){
//performs inter-related functions on both ec1 and ec2
}
}
这样,让某人直接与 API 交互并没有什么害处,ec1
但是ec2
,我想确保这是相当万无一失的,因为至少该人无法更改被操纵的实际资源,因此无法更改const
指针。
这有意义吗,是不是很好地使用了 const 指针?
或者,我可以private
完全制作它们,忘记指针(这个类无论如何管理这些对象),只做额外的工作来为这些对象中包含的公共函数编写访问器。但这似乎有点矫枉过正,对吧?