若是可能的话, 尽可能避免本身去写动态分配的数组,转而使用 vector 和 string 。c++
原书做者惟一想到的一个不用 string 的可能的理由,就是 string 所使用的引用计数 (reference counting) 在多线程下可能会由于并发控制反而致使性能降低。咱们能够经过查看文档或者 STL 源面的方法来看 String 是否引入了引用计数,若是 string 在多线程下真的由于引用计数而致使了性能降低,咱们能够经过下面的方法来避免:算法
- 看是否能够经过某些方法来禁用引用计数,例如条件编译
该方法可移植性不佳,但最简单。 - 看是否有 string 的非引用计数替代品。
- 用 vector<char> 来替代 string
虽然这样可能会致使不少 string 专属的成员函数不能用,但大多的函数均可以经过 STL 算法来替代。
#include <vector> #include <stdio.h> using namespace std; int main(int argc, char *argv[]) { vector<char> ss; char c = 'a'; while (c < 'z') { ss.push_back(c); c++; } char* p = ss.data(); fprintf(stderr, "p = %s\n",p); return 0; }
Output:sql
~/tmp $ g++ test.cpp -o test ~/tmp $ ./test p = abcdefghijklmnopqrstuvwxy