在C中,malloc()
返回void*
。但是在C ++中,new
会返回什么?
double d = new int;
答案 0 :(得分:35)
你必须要区分两件事。一个是 新表达式 。它是表达式new T
,其结果是T*
。它做了两件事:首先,它调用 new运算符来分配内存,然后调用T的构造函数(如果构造函数中止)除了例外,它还会调用删除操作符。)
上述 新运营商 有多种口味。最突出的是这一个:
void* operator new(std::size_t);
您可以明确地调用它,但这种情况很少发生。
还有其他形式的 new运算符,例如对于数组
void* operator new[](std::size_t);
或所谓的展示位置新(这真的是假新的,因为它没有分配):
void* operator new(void*, std::size_t);
答案 1 :(得分:12)
new Type[x]
和new Type
返回的值类型为Type *
。您的示例double d = new int
包含两个错误:
double *d = new int
int *d = new int
或void *d = new int