有個項目用到了list,用的是標準的list類,封裝在結構體中,如下
typedef struct
{
.....
std::list<T *> tlist;
}tStruct;
在代碼中是這樣用的
tStruct * newst = (tStruct *)malloc(sizeof(tStruct));
T * newElement = (T*)malloc(sizeof(T));
newst->tlist.push_back(newElement);
運行到此處,出錯“segmentation fault”,退出。網上查到是malloc沒有調用list的構造函數。將malloc換成new後解決。
所以要注意c++可以兼容c,但c無法兼容c++,list類是用構造函數實例化的,malloc屬於c標準的簡單的內存分配方式,只支持基本的變量類型,不支持c++的方式。