若是可能的話, 儘可能避免本身去寫動態分配的數組,轉而使用 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