首页手机智能仪表数据终端NB一I0T 智能仪表数据是如何存储到sql的

智能仪表数据终端NB一I0T 智能仪表数据是如何存储到sql的

圆圆2025-08-13 20:01:13次浏览条评论

使用vectorred_ptrgt;主要是为了实现共享共享、支持多态性、深复制和安全管理动态对象生命周期;应注意通过make_shared正确初始化重组重复释放,使用weak_ptr打破循环引用防止内存溢出,权衡内存局部性与灵活以优化性能,确保容器操作的安全性,并在多线程环境下对shared_ptr实例的共享修改进行同步,建议优先使用make_shared、避免取消共享卸载、结合unique_ptr

智能指针在容器中怎么用 vector存储shared_ptr注意事项

在C中,将std::shared_ptr登录后复制存储在std::vector登录后复制容器中是一种常见的做法,尤其在需要共享对象交换、避免内存泄漏或实现多焦点语义时。但使用时需要注意一些关键点,以保证程序的性能、安全性和可维护性。1. 用vectorlt;shared_ptrlt;Tgt;gt;登录后复制登录后复制登录后复制登录后复制登录后复制?

为什么使用vectorlt;shared_ptrlt;Tgt;gt;登录后复制登录后复制登录后复制登录后复制登录后复制不是vectorlt;Tgt;登录后复制登录后复制登录后复制登录后复制或vectorlt;unique_ptrlt;Tgt;gt;登录后复制登录后复制登录后通常有以下原因:共享共享:多个地方需要持有同一个对象的引用,shared_ptr登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制自动管理生命周期。多态性支持:斯托基类指针时,shared_ptrlt;Basegt;登录后复制可以指向派生类对象,实现多态。深拷贝:对于大对象或不可拷贝类型,用指针避免复制开销。安全的动态生命周期管理:对象在不再被任何对象 share_ptr登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制引用时自动释放。2. 使用vectorlt;shared_ptrlt;Tgt;gt;登录后复制登录后复制登录后复制登录后复制登录后复制的注意事项✅ 正确初始化shared_ptr

不要将裸露施工构造shared_ptr登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制重复登录后,否则会导致复制重复释放。

推荐使用 make_shared 登录后复制 登录后复制:std::vectorlt;std::shared_ptrlt;MyClassgt;gt; vec;vec.push_back(std::make_sharedlt;MyClassgt;(arg1, arg2));登录复制后

避免这样写:MyClass* ptr = new MyClass();vec.push_back(std::shared_ptrlt;MyClassgt;(ptr));vec.push_back(std::shared_ptrlt;MyClassgt;(ptr)); // 错误!两个shared_ptr独立管理相同指针登录后复制✅注意循环引用问题

如果share_ptr登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制指向的对象内部又持有自身的 shared_ptr登录后复制登录后复制登录后复制登录后复制引用(或通过容器间接引用),可能造成循环引用,导致内存溢出。

解决方法:在适当位置使用std::weak_ptr登录后复制打破循环。

class Node {public:std::shared_ptrlt;Nodegt;parent;std::vectorlt;std::shared_ptrlt;Nodegt;gt;children; //如果children反向引用parent,应考虑用weak_ptr};登录后复制✅性能考量:内存局部性vs灵活

vectorlt;shared_ptrlt;Tgt;gt;登录后复制登录后复制登录后复制登录后复制登录后复制中存储是指针,实际对象分散在堆上,可能造成:存储分数率低(访问时性能优于向量;Tgt;登录后复制登录后复制登录后复制登录后复制)额外的控制块增量(每个shared_ptr登录后复制登录后复制登录后复制登录后复制备份登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制记录复制都有引用计数)

建议:如果不需要共享副本,优先使用矢量lt;Tgt;登录后复制登录后复制登录后复制登录后复制 或 vectorlt;unique_ptrlt;Tgt;gt;登录后复制登录后复制登录后复制如果对象大或不可复制,再shared_ptr登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制✅容器操作的安全性

矢量登录后复制登录后复制的扩容(push_back登录后复制如导致)重新分配登录后复制)会复制或移动shared_ptr登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制,但这是安全的,因为shared_ptr登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制支持复制和移动语义。vec.push_back(ptr); // 增加引用计数,安全vec.erase(it); // 删除元素,引用计数减一,对象可能被释放登录后复制

注意:删除向量登录后复制登录后复制中的元素或清空容器时,shared_ptr登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制被中继,引用计数减一,若归零则自动释放对象。多线程环境下的注意点

虽然shared_ptr登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制的引用计数是线程安全的(线程多个增加/减少引用安全),但多个线程同时访问同一个share_ptr登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制对象本身(如赋值、复印)需要外部同步。

// 多线程操作同一个shared_ptr实例时要加锁std::shared_ptrlt;MyClassgt; sp = std::make_sharedlt;MyClassgt;();std::vectorlt;std::shared_ptrlt;MyClassgt;gt; vec;// 线程1vec.push_back(sp); // 安全:复制sp,引用计数增加// thread2vec.push_back(sp); // 安全:同上//但如果多个线程修改同一个shared_ptr变量,则不安全登录后复制3. 实践推荐优先使用make_shared登录后复制登录后复制:更高效(减少内存分配次数),更安全。避免不必要的shared_ptr:如果只是唯一所有者,用unique_ptr登录后复制更轻量。注意生命周期:确保shared_ptr登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登录后不会意外延长对象生命周期。防止循环引用:尤其是在树、图结构中。考虑替代方案:vectorlt;unique_ptrlt;Tgt;gt;登录后复制登录后复制登录后复制:唯一一个重复,性能更好vectorlt;Tgt;登录后复制登录后复制登录后复制登录后复制:值语义,适合小对象使用对象池索引:避免谐波动态分配

基本上就这些。vectorlt;shared_ptrlt;Tgt;gt;登录后复制登录后复制登录后复制登录后复制登录后复制 是强大且安全的工具,但用于场景,注意引用计数、循环引用和性能影响。

以上就是智能指针在容器中怎么用向量存储shared_ptr注意事项的详细内容,更多请关注乐常识哥网其他相关文章!

智能指针在容器中怎么
使用go语言开发数组中数据类型需要一致吗 使用go语言的步骤
相关内容
发表评论

游客 回复需填写必要信息