3 回答

TA貢獻1797條經(jīng)驗 獲得超6個贊
這條線:
Time t (12, 0, 0);
... Time在本地范圍內(nèi)分配一個類型的變量,通常在堆棧上,當(dāng)它的作用域結(jié)束時將被銷毀。
相比之下:
Time* t = new Time(12, 0, 0);
...通過調(diào)用::operator new()或分配一塊內(nèi)存Time::operator new(),然后Time::Time()使用thisset 調(diào)用該內(nèi)存塊中的一個地址(并且還作為結(jié)果返回new),然后存儲在該內(nèi)存塊中t。如你所知,這是一般的堆(默認(rèn))完成,并要求您delete在以后的節(jié)目,而指針t則一般存儲在堆棧上。

TA貢獻1793條經(jīng)驗 獲得超6個贊
另一個明顯的區(qū)別是訪問t的變量和方法。
Time t (12, 0, 0);
t.GetTime();
Time* t = new Time(12, 0, 0);
t->GetTime();

TA貢獻1921條經(jīng)驗 獲得超9個贊
我想你已經(jīng)明白了所有的不同之處。假設(shè)你很清楚通過指針和變量訪問t成員的語法差異(好吧,指針也是一個變量,但我想你明白我的意思)。并假設(shè)您在將t傳遞給函數(shù)時知道按值調(diào)用和按引用調(diào)用的區(qū)別。而且我認(rèn)為你也明白如果你將t分配給另一個變量并通過其他變量進行更改會發(fā)生什么。結(jié)果將根據(jù)t是否為指針而不同。
- 3 回答
- 0 關(guān)注
- 478 瀏覽
添加回答
舉報