Я использую клиент Redis C ++ для разработки клиентских API, которые будут выполнять операции CRUD в кластере Redis. Используемая мной клиентская библиотека возвращает указатель структуры redisReply
при каждом выполнении команды. Позже я должен использовать функцию freeReplyObject()
для указателя, чтобы освободить память.
Чтобы разработать более безопасный способ, чтобы я случайно не использовал freeReplyObject()
для недопустимого указателя, я думаю о написании класса-оболочки:
class reply_wrapper
{
public:
redisReply* p_reply;
reply_wrapper(redisReply* reply = NULL)
{
p_reply=reply;
}
~reply_wrapper()
{
freeReplyObject(p_reply);
}
};
Я думаю о создании объекта этого класса всякий раз, когда я буду выполнять команду на сервере. Я думаю, что при этом мне больше не придется освобождать память вручную. Является ли этот подход правильным и есть ли лучший подход?
Обратите внимание, что freeReplyObject()
обрабатывает регистр указателя null
.
Я получаю почти все предложения по использованию
разделяемой указатель / уникальный-указатель. Пока я проверяю доступные примеры
онлайн и посмотреть, как это соответствует моему сценарию (пользовательский деструктор), я бы
также хотелось бы знать, если что-то принципиально не так в моем методе
обработки памяти выше.