[Redis] redis常见命令和String字符串解析
2026/6/5 8:50:57
.get()正确 / 错误代码对照表(企业级终极版)我给你做最清晰、最实用、背完永不踩坑的对照表,直接复制到你的代码手册里!
cpp
运行
// 函数 void show(DeviceModel* ptr); // 调用 ✅ 正确 QSharedPointer<DeviceModel> sp(new DeviceModel); show(sp.get());cpp
运行
// C 接口 void old_c_api(DeviceModel* ptr); // 调用 ✅ 正确 old_c_api(sp.get());cpp
运行
// 内部只是使用,不管理内存 ✅ 正确 void use(DeviceModel* ptr) { if (ptr) ptr->show(); } use(sp.get());.get()再构造一个智能指针(致命错误)cpp
运行
// ❌ 崩溃:双重释放! QSharedPointer<DeviceModel> sp2(sp.get());delete从.get()拿到的指针cpp
运行
// ❌ 崩溃:智能指针还会再删一次 delete sp.get();.get()cpp
运行
DeviceModel obj; QSharedPointer<DeviceModel> sp(&obj); sp.get(); // ❌ 崩溃.get()指针(野指针)cpp
运行
// 全局变量保存裸指针 ❌ 危险! DeviceModel* m_ptr; void save(DeviceModel* p) { m_ptr = p; } // 外面智能指针释放后,m_ptr 变成野指针 save(sp.get());.reset()cpp
运行
DeviceModel* raw = new DeviceModel; sp1.reset(raw); sp2.reset(raw); // ❌ 崩溃:两个智能指针管理同一块内存.get()只用来 “借” 指针给别人用,不转移所有权
谁都不能用.get()的结果去 delete 或构造新智能指针
释放只看智能指针本身,.get()不影响释放、不影响计数