我正在使用一个MFC项目,它应该在一个独立于平台的环境中使用std-function代替MFC / AFX。
例如:改为CString std :: string,而不是CMutex将使用std :: mutex。
什么是平台独立,C ++ 11 std :: - 相当于MFC函数“AfxIsValidAddress”?
答案 0 :(得分:4)
标准库中没有与AfxIsValidAddress()
类似的内容,看起来该函数实际上并没有进行那么多的验证。
请参阅AfxIsValidAddress (and Others) Don’t Work as Advertised,其中说该函数最终只是对NULL进行检查。它还有关于有效地址检查功能系列的说法:
有几个类似功能的Win32 API:
IsBadWritePtr
,IsBadHugeWritePtr
,IsBadReadPtr
,IsBadHugeReadPtr
,IsBadCodePtr
,IsBadStringPtr
。至少从2004年就知道这些 功能被破坏无法修复,永远不应该使用。该 全能的Raymond Chen和Larry Osterman都在讨论原因 细节,所以只是一个简短的重复:IsBad * Ptr都通过访问 测试地址并捕获任何抛出的异常。问题是那个 这些访问违规中的一些(即堆栈保护的那些) 永远不应该被捕获 - 操作系统使用它们来正确放大 线程堆栈。
我认为最好只遵循标准的C ++过程来检查指针是不是nullptr
还是更好,以便尽可能地限制指针的使用。