Effective_STL 学习笔记(十三)尽量使用 vector 和 string 来代替动态分配的数组

时间:2022-02-04 04:22:27

 

无论何时,准备动态分配一个数组,应该首先考虑使用一个 vector 或一个 string,vector 和 string 管理自己的内存,当元素添加到容器时,他们的内存会增长,而且当一个 vector 或 string 销毁时,它的析构函数会自动销毁容器中的元素,回收存放那些元素的内存。

 

vector 和 string 时羽翼丰满的序列容器,STL 算法,begin()、end()和size()等成员函数。

把 vector 和 string  中的数据传给需要 array的API很简单。

能想到的一个用 vector 和 string 代替动态数组会出现的问题是,很多 string 后台使用了引用计数。

 

如果用到的 string 实现是引用计数的,已经确定 string 的引用计数支持是一个性能问题的多线程环境中运行,可以有至少三个合理的选择:

  1. 看库实现是否可以关闭引用计数,通常是通过改变预处理量的值;

  2. 寻找或开发一个不适用引用计数的 string 实现替代品;

  3. 考虑使用 vector<char> 来替代 string,这样放弃了string的专有成员函数,

   但大部分功能仍然可以通过STL算法实现。

 

所以结论是:如果你在使用动态分配数组,你可能要做更多工作。要减轻你的负担,要总是考虑使用 vector 和string 来代替