C++ new 動態陣列初始化
阿新 • • 發佈:2019-01-11
問題:紅字部分的程式碼是否有問題?
程式碼是沒有問題的,考慮的是new申請的記憶體有沒有初始化?
在這段程式碼中,有無初始化是沒有關係的,因為str字串中已含有字串結束標誌。
inline mystring::mystring( const char* str )
{
if (!str){
m_pdata = 0;
}
else{
<span style="color:#ff0000;"> m_pdata = new char[strlen(str)+1];
strcpy(m_pdata,str);</span>
}
}
動態陣列初始化:
對於內建資料型別元素的陣列,必須使用()來顯示指定程式執行初始化操作,否則程式不執行初始化操作:
int *pia = new int[10]; // 每個元素都沒有初始化
int *pia2 = new int[10] (); // 每個元素初始化為0
類型別元素的陣列,則無論是否使用(),都會自動呼叫其預設建構函式來初始化:
string *psa = new string[10]; // 每個元素呼叫預設建構函式初始化
string *psa = new string[10](); // 每個元素呼叫預設建構函式初始化
參考:http://www.cnblogs.com/mywebname/articles/2291540.html
.