use*_*379 3 c++ pointers object
请参阅此示例。
大学的班级有一个主任和很多学生所以我的班级会是这样的
A)
class University {
Director d;
Student list[1000];
};
Run Code Online (Sandbox Code Playgroud)
或者
b)
class University {
Director* d;
Student* list[1000];
};
Run Code Online (Sandbox Code Playgroud)
我的问题是如何决定类属性应该是指针还是值。
大多数其他答案都集中在堆与直接包含的细节上(或者根本不提供任何信息,例如当您需要指针时使用指针......而不是关注细节,而是考虑应用程序的整体设计。
第一个问题是关于所有权。在你的项目中,那些学生和主任是属于班级的吗?或者它们是否存在于类范围之外。在大多数简单的应用程序中,对象可能只存在于班级内部,但在其他更复杂的设计中,学生可能属于学校,并且仅在班级中被引用(或者主任也可能向其他班级教授一些课程)。如果班级拥有这些对象,那么组合将是最好的方法:将导演直接作为成员,将学生放在班级直接持有的容器内(我会推荐一个向量,这对于大多数人来说是安全的选择)例)。
如果对象不属于该类,那么您宁愿使用聚合。拥有该对象的人都必须管理生命周期并决定如何存储实际对象,并且该类将仅保存对这些对象的引用(一般意义上)。随着选择的增多,事情变得更加复杂。如果所有权可以转移,那么您将动态分配对象并保存指针,您应该在其中读取智能指针,以便为您管理内存。
如果所有权没有改变,并且学生/主任的生命周期保证超出班级的生命周期,您可以使用参考文献。尤其是对于导演来说。对于学生来说,情况会更加复杂,因为您无法拥有普通引用的容器,因此解决方案可能仍然是指针,即指针向量。引用的另一个问题是它们不能重新安置,这意味着如果你持有对主任的引用,那么班级的主任将在班级的整个生命周期中固定,你将无法更换她。
设计在某种程度上很复杂,您将通过经验来学习,但希望这将为您的问题提供快速入门。