编写安全包装类以管理用户定义对象的指针
Writing a safe wrapper class for memory management of a user-defined object's pointer
我正在使用 redis c++ 客户端来开发客户端 API,这些 API 将在 redis 集群上执行 CRUD 操作。每当执行命令时,我使用的客户端库都会返回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
指针的情况。
我几乎得到了所有关于使用 共享指针/唯一指针。当我检查可用示例时 在线看看它如何适合我的场景(自定义析构函数),我会 还想知道我的方法是否有任何根本性错误 处理上面的内存。
正如建议的那样,我使用了std::unique_ptr
,在构造它时,我必须传递一个函数来调用其中的freeReplyObject
函数。
struct redisReplyDeleterFunctor {
void operator()(redisReply* p) {
freeReplyObject(p);
}
};
unique_ptr<redisReply, redisReplyDeleterFunctor> reply((redisReply*)(redisClusterCommand(getDbContext(), command.c_str())));
现在我不需要手动调用freeReplyObject()
,一旦我的unique_ptr
超出范围,内存就会自动释放。
相关文章:
- 自定义对象的dlib序列化在gcc中失败
- 如何将带有自定义对象的容器从C++传递到QML
- 直接在 unordered_map 的方法中使用哈希,而不是生成哈希的用户定义对象
- 如何使用Q_PROPERTY公开自定义对象列表
- 如何在自定义对象的<<运算符中添加自定义前缀
- 将自定义对象作为参数从目标 C 传递到 C++
- 如何使用构造函数声明指向用户定义对象的指针?
- 使用自定义对象声明shared_ptr数组时出现错误 C2664
- 在具有自定义对象的集合中查找值
- std::set 不会检测到重复的自定义对象
- 如何使用自定义对象的序列化在 c++ 中编写自定义二进制文件处理程序
- std::排序为排序自定义对象时出现的向量引发错误
- 如何通过引用对用户定义对象的类型集 (STL) 的数组元素进行增强迭代?
- 具有自定义对象的C 优先级队列
- 自定义对象构造函数在循环外部循环
- 带有自定义对象的C 范围循环
- 为什么不允许通过 decltype(lamda) 定义对象,我该如何改进它?
- 如何正确地将规则 5(或零?)应用于包含带有字符串的自定义对象向量的类
- 编写安全包装类以管理用户定义对象的指针
- 如何在包含自定义对象的容器中使用分区函数C++