从类中提供指向私有成员的指针

Providing pointer to private member from within class

本文关键字:成员 指针      更新时间:2023-10-16

我意识到提供一个返回指向私有方法的指针的方法会破坏封装,并将字段暴露给使用该类的任何人。但是,假设以下内容:

您有一个类,它调用另一个类的方法(它需要一个指向某个私有字段的指针(,并且私有成员的地址作为参数传递给此方法。

据我所知,只要私有成员的地址仅以类开发人员控制的方式公开,这就不会破坏封装(即开发人员确切地知道它将如何使用(。当然,调用的方法可以(假设你没有编写它(暴露私有成员,但我们是否需要展望那么远?我已经看过无数次了,所以我想这不是糟糕的设计实践的结果吗?

编写将指针指向其他类的私有成员并对其进行修改的方法是否不好?每个班级应该只"照顾自己"吗?

这将是一个糟糕的设计,因为大多数类都有getter和setter来读取和写入对象。因此,如果该函数需要读取和写入,那么它应该请求对象引用,而不是指向任何私有成员的指针。

在大多数情况下,当函数需要对变量的引用时,它会要求引用常量值。

我意识到提供一个返回指向私有方法的指针的方法会破坏封装,并将该字段暴露给使用该类的任何人。

这从一开始就不是真的。

具有返回指针作为其接口一部分的方法的类绝对没问题,并且它返回成员变量这一事实是外部世界不需要知道的实现细节

话虽如此,很难设计一个涉及返回非拥有指针的函数的理智类接口,因此我们倾向于避免这样做。

编辑问题的第二部分:

任何类都应该理智地处理其公共接口的任何可能的使用排列(包括取消引用任何返回的指针(。使用公共接口的内容或人员应该是完全无关紧要的,您应该假设该类的所有用户都将使用整个公共 API。

如果你有只希望对特定类型或函数可用的类部分,那么这正是friend的用途。但这与指向成员的指针无关,它适用于类的任何和所有部分。