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)
或者我可以做演员吗?
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。
| 归档时间: |
|
| 查看次数: |
268 次 |
| 最近记录: |