用vector和string代替new动态分配的数组

使用new动态分配数组,需要时时刻刻记住delete,很容易造成memory leak。使用vector和string则消除了这个负担,因为它们有自己的内存管理,在它们的析构函数中会自动释放内存。

通常情况下用vector代替动态数组,如果要存储的元素类型是字符类型时使用string。

所有适合于序列容器的STL算法,vector和string都可以使用。所以使用vector和string会带来更多的便利。

许多string的实现采用了“引用计数”,用于消除不必要的内存分配和不必要的字符拷贝。但这样的实现在多线程环境中,需要注意一下因支持线程安全而导致的性能问题。

如果所使用的string以“引用计数”方式实现,同时又运行在多线程环境中,并因此影响了程序效率。考虑以下三种选择:(1)是否可以通过改变某个预处理变量禁用引用计数。(2)寻找另外一个不使用“引用计数”实现的string。(3)使用vector<char>代替string,vector不允许使用引用计数,所以不会有多线程性能问题。

VC编译器自2005版本之后,大概是考虑到线程安全问题,string均没有以“引用计数”方式实现。

posted on 2012-12-05 18:32  zhuyf87  阅读(1869)  评论(0编辑  收藏  举报

导航