我是否在 C++ 中转换 new 的结果?

Rob*_*rtS -2 c++ casting heap-memory new-operator

在问题的答案中,Do I cast the result of malloc? 涵盖了我不需要也不应该在 C 中转换返回的void指针malloc()

但是newC++ 中的运算符如何呢?


是否有明确的理由只做

int *p_rt = new int;
Run Code Online (Sandbox Code Playgroud)

代替

int *p_tr = (int*) new int;
Run Code Online (Sandbox Code Playgroud)

或者我可以做演员吗?

Ayx*_*xan 6

new T返回T*,因此无需强制转换:

T* p = new T;
Run Code Online (Sandbox Code Playgroud)

malloc另一方面,的返回类型是void*,因此必须T*在 C++ 中强制转换为:

T* p = static_cast<T*>(malloc(sizeof(T));
Run Code Online (Sandbox Code Playgroud)

还要注意的是,由于尖头的评论new T不仅分配新对象的存储空间,而且函数在内存中的对象。malloc不这样做,所以你必须手动构造对象安置new

  • 应该注意的是,“new T”所做的事情比“malloc”所做的简单分配“更多”。使用“new T”也可以构造对象(调用构造函数)。 (2认同)