为什么 new 不需要强制转换为指针,即使 malloc 需要它?



;新>标题为:

 void* operator new(size_t);

malloc的定义如下:

 void* malloc(size_t);

现在,由于C++是一种强类型语言,它需要程序员进行强制转换,才能将void*指针转换为程序员需要的类型。。。在malloc中,我们必须执行强制转换,但在new中不执行,尽管两者都返回一个void*指针。为什么?

因为当您使用new时,您(通常)会使用一个"新表达式"来分配和初始化对象。然后将该对象的地址分配给指向相同(或父)类型的对象的指针,这不需要强制转换。一个普通的新表达式(即,不是一个新的放置)将在内部调用operator new,但新表达式的结果是而不是,只是来自operator new的结果。

如果直接调用operator new,则需要强制转换其结果以将返回值分配给非空指针,就像处理malloc的返回一样。

因为您对如何使用malloc有错误的印象。它不接收作为参数的类型,而只接收类型的大小。

C和C++是不同的语言。在C中,不需要将mallocvoid*强制转换为目标指针类型。在C++中,new运算符被深入构建到语言中,因此它总是返回与您在参数中给出的类型相对应的值。

规则很简单,对C++使用new,对C使用malloc,不要混合使用它们。

因为当您调用new时,operator new调用只是整个链中生成的一个步骤。

当您执行s=new my_type(args);时,编译器会将其扩展为:

s = (my_type*)my_type.operator new(sizeof(my_type));
s.my_type(args); //Constructor call

相关内容

  • 没有找到相关文章

最新更新