有关 #pragma push_macro("new") 的用法
2009-11-25 10:47
232 查看
当使用 C++ 托管扩展时,如果尝试在 MFC
应用程序内创建托管类型的实例,则编译器还将生成 C3828。为了跟踪内存的使用情况,在 MFC 调试版本中使用时 MFC 重定义 new
运算符。由于此重定义的缘故,会在 MFC 应用程序中创建托管类的实例,从而导致错误。在将现有 MFC
代码移植到公共语言运行库时通常会发生这种情况。对于发布版本不会发生此错误,这是因为 MFC 不重定义 new 运算符。
若要避免此错误,请在创建托管类型的实例前,使用 #undef 和 push_macro 指令暂时取消定义 new 运算符。在最后一行托管代码的后面,使用 pop_macro 还原先前的 new 运算符定义。
#pragma push_macro("new")
#undef new
String* s;
s = new String("Hello world!");
#pragma pop_macro("new")
详细信息清参考MSDN文档:http://msdn2.microsoft.com/zh-cn/library/b3z6z0ay(VS.80).aspx
希望能够对您有所帮助。
Jasson Wang
在线技术支持工程师
微软全球技术支持中心
应用程序内创建托管类型的实例,则编译器还将生成 C3828。为了跟踪内存的使用情况,在 MFC 调试版本中使用时 MFC 重定义 new
运算符。由于此重定义的缘故,会在 MFC 应用程序中创建托管类的实例,从而导致错误。在将现有 MFC
代码移植到公共语言运行库时通常会发生这种情况。对于发布版本不会发生此错误,这是因为 MFC 不重定义 new 运算符。
若要避免此错误,请在创建托管类型的实例前,使用 #undef 和 push_macro 指令暂时取消定义 new 运算符。在最后一行托管代码的后面,使用 pop_macro 还原先前的 new 运算符定义。
#pragma push_macro("new")
#undef new
String* s;
s = new String("Hello world!");
#pragma pop_macro("new")
详细信息清参考MSDN文档:http://msdn2.microsoft.com/zh-cn/library/b3z6z0ay(VS.80).aspx
希望能够对您有所帮助。
Jasson Wang
在线技术支持工程师
微软全球技术支持中心
相关文章推荐
- #pragma push_macro("MACRO_NAME") 与 #pragma pop_macro("MACRO_NAME") 用法详解
- 关于#pragma push_macro("new") .
- 关于#pragma push_macro("new")
- #pragma push_macro #pragma pop_macro和#pragma pack的用法
- String str="abc"和String str=new String("abc")的区别
- 有关"SELECT FOR UPDATE"的一些问题
- C++ - extern "C"用法浅析
- 宏中"#"和"##"的用法
- "iOS push全方位解析(一)【译文】"——iOS PUSH概述
- extern "C"的用法解析
- Git "warning: push.default is unset"
- 深入理解C/C++混合编程(关于#ifdef __cplusplus extern "C" {...}的用法)
- C++中extern "C"的用法
- SDL用法:"PiratesHo!"全集
- 详解css中"点","井号","逗号","空格","冒号"的用法
- extern "C"用法(转载)
- nafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)" already defined
- 宏中"#"和"##"的用法
- 总结C++中三种关于"new"的使用方法
- $_SERVER["REQUEST_URI"],["QUERY_STRING"],["PHP_SELF"] ,["SCRIPT_NAME"]用法