最近寫(xiě)demo的時(shí)候求厕,new一個(gè)類(lèi)的時(shí)候贪惹,有時(shí)忘了加(),即 A *pA = new A; A *pA = new A();這兩個(gè)寫(xiě)法有區(qū)別嗎? 寫(xiě)一個(gè)簡(jiǎn)單的代碼驗(yàn)證下:
class new_test
{
public:
void print_fun() {
std::cout << "new_test:" << test_ << std::endl;
}
private:
int test_;
};
int main()
{
new_test* p1 = new new_test;
p1->print_fun();
new_test* p2 = new new_test();
p2->print_fun();
}
new_test:-842150451
new_test:0
如果我們定義了類(lèi)的默認(rèn)構(gòu)造函數(shù),即如下:
class new_test
{
public:
new_test() {}
void print_fun() {
std::cout << "new_test:" << test_ << std::endl;
}
private:
int test_;
};
new_test:-842150451
new_test:-842150451
請(qǐng)按任意鍵繼續(xù). . .
發(fā)現(xiàn)現(xiàn)在是一致的。查資料桌肴,發(fā)現(xiàn)是第一種情況下:p1執(zhí)行的是默認(rèn)初始化,p2執(zhí)行的是值初始化琉历。但是對(duì)于默認(rèn)構(gòu)造是否是用戶寫(xiě)的也是有區(qū)別的(第二種情況)坠七。
結(jié)論:自己的類(lèi)最好定義一個(gè)默認(rèn)構(gòu)造函數(shù),并且初始化所有需要初始化的變量旗笔,防止出現(xiàn)莫名其妙的問(wèn)題