新的int和new(int)之间的C++有什么区别?
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