将我们的C++代码从VS2008迁移到VS2010时遇到问题。到目前为止,我仍然找不到原因的解释,感谢您的帮助。
我们有一个自定义的内存分配器,它位于dll中。在其余的代码中,我们使用预处理器将分配重定向到我们的函数。遵循以下简单代码的代码在VS2008中可以正确编译,但在VS2010中不能正确编译。
在stdafh.h中:
#define free my_free
#include <string>
在VS2010中,我得到:
1>d:\program files\microsoft visual studio 10.0\vc\include\xdebug(62): error C3861: 'free': identifier not found
来自该行:
template<class _Ty>
void __CLRCALL_OR_CDECL _DebugHeapDelete(_Ty *_Ptr)
{ // delete from the debug CRT heap even if operator delete exists
if (_Ptr != 0)
{ // worth deleting
_Ptr->~_Ty();
// delete as _NORMAL_BLOCK, not _CRT_BLOCK, since we might have
// facets allocated by normal new.
free(_Ptr);
任何帮助或想法将不胜感激!
摩西
最佳答案
根据C++ ISO标准,第17.4.3.1.1.2节:
这意味着对库函数名称#define
表示其他含义是不合法的。我猜想这只是在VS2008中起作用,但是当移植到VS2010时,编译器作者想出了一个无法正常运行的实现。
如果您想重新定义free
的功能,我建议通过更常规的 channel 将其链接到您自己的更改默认行为的C库实现中,以实现此目的。
关于c++ - 从VS2008到VS 2010的迁移-重大变化?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4745583/