考虑下面的需求,从配置文件中,读取一些数据,这些数据放到一个集合中,获取集合,使用方法A,完成任务。该怎么做?
1、首先明确一点,坚决不能让A返回引用。
2、方法A在栈上创建集合,返回集合。不存在内存泄漏的问题,但是要付出copy代价。
3、方法A在堆上创建集合,返回集合的指针,copy代价很低,但是会存在内存泄漏的问题。
4、主调方法创建一个集合,把集合的引用传递给被调方法A,A修改集合的内容。这个不直观,客户要一些东西,方法A要求客户准备一个容器,A在容器中填充内容。
5、采用哪种方法,要看具体的使用场景,如果集合内容很小,copy代价小,就不要用指针,否者用指针。
6、还要考虑另外一种情况,返回的集合是要客户维护,还是A维护。比如,客户在一个循环中,每次都需要集合,这就会导致A重复读取配置文件。解决这个问题的办法是:客户在循环之前,先把集合保存起来。但是,考虑下面的情况,程序中很多地方,不同的客户,都需要这个集合,那么方法A应该维护集合,读取一次,内部保存起来,下次客户再申请,直接返回就行了。这就意味着,程序运行过程中,集合的内存是不能释放的,可以使用指针,为了避免内存泄漏,可以使用智能指针。