2011-04-19 103 views
6

在Embarcadero RAD Studio中調試C++代碼時發現了這個問題。它似乎在編譯,但坦率地說,雖然它看起來很明顯是什麼意思,但我無法弄清它到底在做什麼。你能解釋一下這個神祕的代碼嗎?

TObject *objPtr (new TObject()); 

如果有人可以提供一個理智的解釋,我將不勝感激。

+3

C++允許您使用類似於對象構造函數的語法初始化內置類型(例如整數或指針)。您也可以使用這種類似構造器的語法作爲類型轉換操作,例如, 'int foo = some_function(int(bar))'。 – 2011-04-19 01:09:02

+0

你需要閱讀構造函數(ctors)。這使用特定於C++的語法來反映ctor被調用的方式,而不是您習慣使用的更類似C語法的語法。通常你不會看到指針,而是看到在堆棧上創建的類實例。不錯的問題,但。 +1。 – 0xC0000022L 2011-04-19 01:34:41

+0

雖然所有的答案都是正確的,並且我想在這些問題出現之前提出一個這樣的答案,但是我讀到的問題是,**爲什麼**正在初始化TObject(而不是某個後代)?例如很明顯,它正在做什麼答案說,但**實際目標**是什麼? – RichardTheKiwi 2011-04-19 03:12:10

回答

1

這會在堆上創建TObject類型的對象,並將其位置存儲在名爲objPtr的TObject指針中。它應該通過行刪除objPtr在某些時候刪除,以防止內存泄漏。

4

它使用直接初始化語法將objPtr初始化爲新分配的Tobject。對於大多數實際用途而言,它相當於Tobject *objPtr = new Tobject();

相關問題