指针和面向对象的编程

che*_*erd 2 c++ oop pointers responsibility

指针如何与面向对象编程的概念一起使用?

据我了解(并且请注意,我被归类为ID-10T),OOP的主要原则是遏制并保持管理责任(内存/实现/等)包含在类中; 但是当一个对象的方法返回一个指针时,我们似乎正在" 弹出 "该对象.现在,有人可能需要担心:

  1. 难道他们应该删除指针的关联对象?
  2. 但是如果班级仍然需要这个对象呢?
  3. 他们可以改变对象吗?如果是这样,怎么样?(我认识const可能会解决这个问题)
  4. 等等......

这似乎对象的用户现在需要知道多少更多关于类是如何工作的,什么阶级期望用户的.感觉就像是一只"淘汰猫咪"的情景,似乎在面对OOP时是一种打击.

注意:我注意到这是一个与语言无关的问题; 但是,在C++环境中工作时,我被提示提出问题.

小智 5

您描述的是所有权问题.这些是正交的(即独立的,你可以没有另一个,甚至两者都是)面向对象.如果不使用OOP并将指针调整到POD结构,则会出现同样的问题.如果您使用OOP但以某种方式解决它,则没有问题.您可以(尝试)使用更多OOP或以其他方式解决它.

它们也与指针的使用正交(除非你挑选和扩展指针的定义).例如,如果两个单独的位置将索引保存到数组中并且变异,调整大小并最终删除该数组,则会出现相同的问题.

在C++中,通常的解决方案是选择正确的智能指针类型(例如,当您希望共享对象时返回共享指针,或者指示独占所有权的唯一指针),以及大量文档.实际上,后者是任何语言的关键成分.

你可以做的一件 OOP 相关的事情是封装(当然,没有OOP你可以很好地进行封装).例如,不要暴露对象,只暴露查询引擎下的对象的方法.或者不暴露原始指针,只暴露智能指针.