[英]new operator with parentheses “(”, “)” instead of brackets “[”, “]”
我在代碼中發現了一個瘋狂的錯誤。
我寫了以下這一行:
GLfloat* points = new GLfloat(1024);
而不是
GLfloat* points = new GLfloat[1024];
我才注意到它。 在我發現錯誤之前,我的代碼編譯並運行了幾次。 我意識到這是僥幸的,但我的問題是我最初的做法是什么?
我注意到它看起來有點像使用指向已分配內存的指針創建一個類。 它是否在堆上創建單個GLfloat,初始值為1024.0
? 如果這是真的,為什么它是有效的語法? (GLfloat不是一個類,是嗎?)
是的,你將創建一個單一GLFloat
上初始化為1024.0堆。 您可以使用與類相同的語法初始化基元。 例如
int i(10);
將在堆棧上創建一個初始化為10的int。
GLfloat
是float
的OpenGL別名(即typedef float GLfloat;
)。 因此代碼:
GLfloat* points = new GLfloat(1024);
相當於:
float* points = new float(1024);
其中分配一個浮點數並將其初始化為1024.0
並將其地址分配給指針points
。
我最初的線路是做什么的?
GLfloat* points = new GLfloat(1024);
讓我們嘗試用int
替換GLfloat
,您將看到如果GLFloat
是類似於int
或float
的類型,那么您將具有以下內容:
int * points = new int(1024);
上面的語句意味着您正在創建一個指向int
的指針,初始值為1024
。 所以你的情況,這意味着創建一個指針points
與類型是可變GLfloat
和初始值1024
。
它相當於在精簡版中編寫以下內容:
int * points = new int;
*points = 1024;
請參閱此處以獲取更多解釋
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.