int这样的基本数据类型,在新的C++运行库中,是以类的形式存在的,对一些运算符做了重载,所以可以当做类来初始化,但早期的C库是不能的.如:
int i(10);//这样就是调用了构造函数,初始化为10了.
而new 也有变化,new[]的原型和new的原型如下:
void *__CRTDECL operator new[](size_t count) _THROW1(std::bad_alloc)
{
// try to allocate count bytes for an array
return (operator new(count));
}
void *__CRTDECL operator new(size_t size) _THROW1(_STD bad_alloc)
{
// try to allocate size bytes
void *p;
while ((p = malloc(size)) == 0)
if (_callnewh(size) == 0)
{
// report no memory
static const std::bad_alloc nomem;
_RAISE(nomem);
}
return (p);
}
//可以这样做:
int* a = new int();//分配一个元素的int数组,初始化为0
int* b = new int(100); //分配一个元素的int数组,初始化为100
int* c = new int[20]();//分配20元素的int数组,所有元素初始化为0
int* d = new int[20](100); //这样做是错误的,不能初始化.
早期的C库没有这样定义new的函数,所以不能,和系统没有关系.如果你使用新的C++库,或者将new按上面的方式做重载,就可以这样做了.
该new的定义在文件"newaop.cpp"和"new.cpp"中,
[[it] 本帖最后由 debroa723 于 2008-12-5 21:02 编辑 [/it]]