2011-09-23 69 views
-1

我創建一個新的類的實例是這樣的:爲什麼我的類的構造函數在這種情況下不被調用?

Cube* cube1; 

有代碼在Cube構造,但它沒有運行!這是通常的嗎?

+5

查找C++一個很好的教程,你缺乏一個非常重要的基本概念:在指針和對象之間的區別。 –

+1

這不是遊戲開發問題,可能屬於StackOverflow。 –

回答

6

你實際上並沒有創建任何實例。

您要撥打的變量cube1是指向Cube的指針。

創建多維數據集,你應該有:

Cube* cube1 = new Cube(); 

這創造立方的堆內存的新實例,你應該叫delete cube1一旦你不使用它了。

或:

Cube cube1; 

此創建堆棧內存立方體的一個新實例,一旦超出範圍就會被破壞。

PS。你應該得到一個C++教科書。

+0

我的確在想這個,但奇怪的是我可以在指針上調用函數而不用實例化它。顯然是另一種誤解,但你能澄清嗎? – SirYakalot

+3

編譯器不檢查指針是否指向任何東西,因爲在大多數情況下,它不可能知道。程序員必須確保在指針指定給合法對象之前避免使用指針。 – Kylotan

+0

Kylotan是正確的,你創建了一個有效的(從類型pov)Cube指針。但是這個指針並沒有指向任何有效的對象。從編譯器的pov一切都沒問題,但是在運行時它會失敗,因爲沒有實際的Cube。 –

1

您未創建多維數據集實例;你正在創建一個指向Cube的指針。

要創建一個指向一個立方體的一個新實例,你想要這樣的代碼:

Cube* cube1 = new Cube;

相關問題