“AfxIsValidAddress”函数的等效标准函数是什么?

时间:2017-06-26 12:19:47

标签: c++ c++11 mfc platform-independent afx

我正在使用一个MFC项目,它应该在一个独立于平台的环境中使用std-function代替MFC / AFX。

例如:改为CString std :: string,而不是CMutex将使用std :: mutex。

什么是平台独立,C ++ 11 std :: - 相当于MFC函数“AfxIsValidAddress”?

1 个答案:

答案 0 :(得分:4)

标准库中没有与AfxIsValidAddress()类似的内容,看起来该函数实际上并没有进行那么多的验证。

请参阅AfxIsValidAddress (and Others) Don’t Work as Advertised,其中说该函数最终只是对NULL进行检查。它还有关于有效地址检查功能系列的说法:

  

有几个类似功能的Win32 API:IsBadWritePtr,   IsBadHugeWritePtrIsBadReadPtrIsBadHugeReadPtrIsBadCodePtr,   IsBadStringPtr。至少从2004年就知道这些   功能被破坏无法修复,永远不应该使用。该   全能的Raymond Chen和Larry Osterman都在讨论原因   细节,所以只是一个简短的重复:IsBad * Ptr都通过访问   测试地址并捕获任何抛出的异常。问题是那个   这些访问违规中的一些(即堆栈保护的那些)   永远不应该被捕获 - 操作系统使用它们来正确放大   线程堆栈。

我认为最好只遵循标准的C ++过程来检查指针是不是nullptr还是更好,以便尽可能地限制指针的使用。