Я использовал MFC-проект, который должен быть реализован в независимой от платформы среде, используя функцию std вместо MFC / AFX.
Например: вместо CString std :: string, вместо CMutex будет использоваться std :: mutex.
Что такое независимый от платформы, C ++ 11 std :: — эквивалент функции MFC «AfxIsValidAddress»?
Там нет чего-то похожего на AfxIsValidAddress()
в стандартной библиотеке, и кажется, что функция на самом деле не делает столько проверки в любом случае.
Увидеть AfxIsValidAddress (и другие) не работают как рекламируемые в котором говорится, что функция заканчивается проверкой на NULL. Это также говорит о семействе допустимых функций проверки адресов:
Существует несколько Win32 API, похожих по функциональности:
IsBadWritePtr
,
IsBadHugeWritePtr
,IsBadReadPtr
,IsBadHugeReadPtr
,IsBadCodePtr
,
IsBadStringPtr
, С 2004 года известно, что эти
функции не подлежат ремонту и никогда не должны использоваться.
Всемогущий Раймонд Чен и Ларри Остерман оба обсуждают причины в
подробно, так что короткая перефразировка: IsBad * Ptr все работает, получая доступ к
проверка адреса и отлов любых исключений. Проблема в том, что
некоторые из этих нарушений доступа (а именно, те, что на стековой охране
страницы) никогда не должны быть пойманы — ОС использует их, чтобы правильно увеличить
стеки ниток.
Я думаю, что лучше просто следовать стандартным процедурам C ++, чтобы проверить, что указатель не является nullptr
или еще лучше ограничить использование указателей в максимально возможной степени.
Других решений пока нет …