У меня есть C++ API с оболочкой C. Клиент C может получить дескриптор базового объекта C++, а затем использовать его для получения другой информации об объекте, например.Проверьте, нет ли непрозрачной ручки C
PersonHandle handle = createPerson("NisseIHult");
char* name = getPersonName(handle); //Get person takes a void* pointer
В приведенном выше коде дескриптор задается классом класса C++ Person.
Вопрос в том, как я могу проверить внутри getPersonName, что аргумент, handle, является допустимым дескриптором? Например, если клиент делает это:
char * name = getPersonName (1234);
это приведет к нарушению доступа внутри getPersonName. Мне нужен способ проверить и проверить дескриптор, а в приведенном выше случае вернуть NULL?
Как пользователи API 'C' создают объекты PersonHandle? Какой-то тип 'createPerson()' API? Отслеживать действительных лиц, которые фактически созданы оттуда. – Chad
Как вы решаете ручку? Если вы внедрили какой-то реестр сопоставления объектов handle-object, вы можете проверить его. – tiguchi
Мне нравится идея наличия внутреннего списка созданных дескрипторов. Затем я могу проверить и проверить адреса. Хорошая идея! –