Какова эквивалентная стандартная функция & quot; AfxIsValidAddress & quot; функционировать?

Я использовал MFC-проект, который должен быть реализован в независимой от платформы среде, используя функцию std вместо MFC / AFX.

Например: вместо CString std :: string, вместо CMutex будет использоваться std :: mutex.

Что такое независимый от платформы, C ++ 11 std :: — эквивалент функции MFC «AfxIsValidAddress»?

0

Решение

Там нет чего-то похожего на AfxIsValidAddress() в стандартной библиотеке, и кажется, что функция на самом деле не делает столько проверки в любом случае.

Увидеть AfxIsValidAddress (и другие) не работают как рекламируемые в котором говорится, что функция заканчивается проверкой на NULL. Это также говорит о семействе допустимых функций проверки адресов:

Существует несколько Win32 API, похожих по функциональности: IsBadWritePtr,
IsBadHugeWritePtr, IsBadReadPtr, IsBadHugeReadPtr, IsBadCodePtr,
IsBadStringPtr, С 2004 года известно, что эти
функции не подлежат ремонту и никогда не должны использоваться.
Всемогущий Раймонд Чен и Ларри Остерман оба обсуждают причины в
подробно, так что короткая перефразировка: IsBad * Ptr все работает, получая доступ к
проверка адреса и отлов любых исключений. Проблема в том, что
некоторые из этих нарушений доступа (а именно, те, что на стековой охране
страницы) никогда не должны быть пойманы — ОС использует их, чтобы правильно увеличить
стеки ниток.

Я думаю, что лучше просто следовать стандартным процедурам C ++, чтобы проверить, что указатель не является nullptr или еще лучше ограничить использование указателей в максимально возможной степени.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]