che*_*erd 2 c++ oop pointers responsibility
指针如何与面向对象编程的概念一起使用?
据我了解(并且请注意,我被归类为ID-10T),OOP的主要原则是遏制并保持管理责任(内存/实现/等)包含在类中; 但是当一个对象的方法返回一个指针时,我们似乎正在" 弹出 "该对象.现在,有人可能需要担心:
const
可能会解决这个问题)这似乎对象的用户现在需要知道多少更多关于类是如何工作的,什么阶级期望用户的.感觉就像是一只"淘汰猫咪"的情景,似乎在面对OOP时是一种打击.
注意:我注意到这是一个与语言无关的问题; 但是,在C++环境中工作时,我被提示提出问题.
小智 5
您描述的是所有权问题.这些是正交的(即独立的,你可以没有另一个,甚至两者都是)面向对象.如果不使用OOP并将指针调整到POD结构,则会出现同样的问题.如果您使用OOP但以某种方式解决它,则没有问题.您可以(尝试)使用更多OOP或以其他方式解决它.
它们也与指针的使用正交(除非你挑选和扩展指针的定义).例如,如果两个单独的位置将索引保存到数组中并且变异,调整大小并最终删除该数组,则会出现相同的问题.
在C++中,通常的解决方案是选择正确的智能指针类型(例如,当您希望共享对象时返回共享指针,或者指示独占所有权的唯一指针),以及大量文档.实际上,后者是任何语言的关键成分.
你可以做的一件与 OOP 相关的事情是封装(当然,没有OOP你可以很好地进行封装).例如,不要暴露对象,只暴露查询引擎下的对象的方法.或者不暴露原始指针,只暴露智能指针.