1.strcpy是拷貝直到\n時結束,所以長度上要增加一個字節,例如原來是一個字符的char[s]="s",
到了string中就是"s\n",strcpy是拷貝2個字符,如果拷貝目標地址只有一個字節長度,就會有問題。
2.每個線程一個棧(stack),堆(heap)空間共享,棧空間線程獨立,全局變量進程內共享.
另外在windows下如果用dll,那麼每個dll有自己的數據段,全局變量在dll內共享.
有些第三方庫內部有隱含的全局變量,使用多線程調用這些庫的時候要小心.
全局變量指static或者在函數體外面定義.
類沒有定義變量,類只是定義數據結構.對象纔是變量,成員變量是對象這個變量內嵌的變量
3.一個問題:
pure virtual method called
terminate called without an active exception
Aborted
看是否有對象被delete兩次了。
4.建議不要在構造函數裏做一些初始化資源之類的事情。構造函數只做不得不做的東西,初始化單獨寫一個init函數,創建後顯式調用。
5.如果函數參數傳的是對象的引用,那麼這個參數是不需要判斷空間是否分配的,這裏的空間是肯定會有的。
6.struct和class的區別就在於默認的訪問是public還是private,其他都一樣
struct S
{
std::string type;
unsigned int len;
unsigned char* body;
public:
~S(){
delete[] body;
body = NULL;
}
};
struct也有繼承
7. 返回引用的用法
方法定義:
static A& getInstance();
調用時
A a = getInstance(); 另外創見一個對象a,將getInstance()返回的對象賦值給a
A& a = getInstance(); 創建一個類似指針的A的引用,所指向的對象就是getInstance()。
8.變量初始化
只有靜態變量被系統初始化了,例如int類型的靜態變量被初始化成0,如果是對象的成員變量,需要自己顯式地初始化,否則不知道是個什麼數字。
9.管道文件
mkfifo /dev/filename
set_fl(STDOUT_FILENO, O_NONBLOCK); /* set nonblocking */