int * num = new (int);
和
int * num = new int;
之間的區別?
有沒有區別?
編輯 thx all。 ...哪一個是最正確答案?
int * num = new (int);
和
int * num = new int;
之間的區別?
有沒有區別?
編輯 thx all。 ...哪一個是最正確答案?
沒有(使用INT型)在您的示例的上下文中的差。 但是,如果您需要創建複合類型的對象,則需要使用加括號的版本。即:
int (**fn_ptr_ok)() = new (int (*[10])()); // OK
int (**fn_ptr_err)() = new int (*[10])(); // error
對於這種特殊的情況下,沒有什麼不同。兩者都是一樣的。只是第一個語法很少被使用,可能是因爲它看起來不方便和神祕,而且需要更多的輸入!
在這個問題上的情況下,這兩個new
S的含義是相同的。 在語法上,前者形式new()
的操作數的類型-ID, 和後者的操作數是新型-ID。 至於新型-ID,如果(....)
出現在操作數的後面,它 解釋爲構造函數的參數列表。 也就是說,如果我們編寫new int(1)
,int
初始化爲1. 另一方面,對於type-id,如果出現(....)
,則它是該類型的一部分。 例如,當我們new
的指針的函數,我們必須使用 new(type-id)
形式。 例如,new(int(*)())
。
我想我明白你在說什麼。我對我的思維閱讀技能感到很自豪。 – log0 2011-03-18 09:49:31
還有一個區別,當你想創建一個動態數組
int n = 2;
int *p = new int[n]; // valid
int *q = new (int[n]); // invalid
括號內的版本需要一定的大小。
對於第二個,你仍然需要使用'delete []',是嗎? – 2011-03-18 12:05:49
@Charles是你需要使用'delete []'。 – 2011-03-18 12:09:53
所以如果'n'是常數,第二個等於爲ONE對象(NOT n)分配空間,它與'int arr [n]'具有完全相同的類型?對? – UmmaGumma 2011-03-20 11:36:42
(不是一個真正的答案,但我不能把它變成註釋)
它更加複雜,因爲「新位置」: http://codepad.org/pPKt31HZ
#include <stdio.h>
void* operator new(size_t N, int x) {
return new char[N];
}
int main(void) {
int x = int();
int* a = new(int()) int;
}
這裏的有趣的是,海灣合作委員會接受這一點,但不是MS/Intel。
這是指向函數的10個指針的數組(返回int並且不帶參數)。看看這個:http://ieng9.ucsd.edu/~cs30x/rt_lt.rule.html – sinek 2011-03-23 08:20:06