这个自定义的opeartor new的实现为什么没有编译警告?解决办法
这个自定义的opeartor new的实现为什么没有编译警告?
为什么以上两个强制转型,编译的时候都没有警告出来?
我用的VC2010.谢谢
------解决方案--------------------
1. my*可以转成void*
::new my 实际分配了内存呢,调用构造函数对成员赋值.
分配内存的时候会用operator new(size_t)函数来分配,该函数是void*
2. 不会
------解决方案--------------------
- C/C++ code
#include"stdafx.h" #include<iostream> using namespace std; struct my{ void* operator new(size_t s){ cout<<s<<endl; return ::new my;//这里返回的是一个my指针,但是operator new声明是返回void* } }; int main(void){ my* pm=new my;//这里返回void*,编译器没有警告类型被强转成了my* return 0; }
为什么以上两个强制转型,编译的时候都没有警告出来?
我用的VC2010.谢谢
------解决方案--------------------
1. my*可以转成void*
::new my 实际分配了内存呢,调用构造函数对成员赋值.
分配内存的时候会用operator new(size_t)函数来分配,该函数是void*
2. 不会
------解决方案--------------------