weak_ptr的主要使用场景,一是用于探查是否内存空间是否有效,用户可以通过expired()或者lock()来检测数据的有效性,以避免空指针。二是可以用于打破循环引用。c++20中的原子智能指针 智能指针的计数器是线程安全,但是其指向的对象的不是线程安全的。如果需要多个线程操作,为了保证安全性,可以 1、直接调用 mutex 的 ...
线程安全 shared_ptr智能指针的引用技术使用了院子操作,只要共享指针再拷贝或者赋值减少引用,实现对应的线程安全 有一个引用计数的指针类型变量,专门用于引用计数,使用拷贝构造函数和赋值拷贝构造函数时,引用计数加1,当引用计数为0时,释放资源。 weak_ptr weak_ptr是弱引用,weak_ptr的构造和析构不会引起引用计数的增加...
C++ Qt面试题60:如何安全的在另外一个线程中调用QObject对象接口 00:53 C++ Qt面试题61:QFrame与QWidget的区别? 01:01 C++ Qt面试题62:详解Qt中的内存管理机制 02:33 C++ Qt面试题63:信号与槽与函数指针的比较? 02:33 C++ Qt面试题64:Qt的父子树节点管理机制 01:41 C++ Qt面试题65:什么情况下...
在编译阶段生成,虚函数和普通函数一样存放在代码段,只是它的指针又存放在了虚表之中。 5.智能指针的本质是什么,它们的实现原理是什么? 智能指针本质是一个封装了一个原始C++指针的类模板,为了确保动态内存的安全性而产生的。实现原理是通过一个对象存储需要被自动释放的资源,然后依靠对象的析构函数来释放资源。
【C++11】智能指针与对象生命周期,常见问题答疑 02:08:46 【C++多线程入门】生产者-消费者模型如何赋能圣诞老人派送礼物 01:04:21 【C++模板课】闭源软件能否元编程?模板编译慢,无法分离,容易代码膨胀?variant的空间利用效率低?小彭老师一一解答 57:37 【C++真题解析】小彭老师解题+思路详解!mq白的现代C++习...
一、智能指针 C++程序设计中使用堆内存是非常频繁的操作,堆内存的申请和释放都由程序员自己管理。程序员自己管理堆内存可以提高了程序的效率,但是整体来说堆内存的管理是麻烦的,C++11中引入了智能指针的概念,方便管理堆内存。使用普通指针,容易造成堆内存泄露(忘记释放),二次释放,程序发生异常时内存泄露等问题等,使用...
在创建单例实例的时候,具有线程安全性。 通过智能指针方式,防止内存泄露。 具有相对的高效性。2、 缺点:肯定没有单线程版本的效率高。 每个子类必须要授权基类,我们可以写一个宏减少输入:#define DECLARE_SINGLETON_CLASS(type) \friendclassCSingletonPtr<type>; ...
1.9 再论shared_ptr 的线程安全 虽然我们借shared_ptr 来实现线程安全的对象释放,但是shared_ptr 本身不是100% 线程安全的。它的引用计数本身是安全且无锁的,但对象的读写则不是,因为shared_ptr 有两个数据成员,读写操作不能原子化。根据文档11,shared_ptr 的线程安全级别和内建类型、标准库容器、std::string ...
首先感慨一句,muduo库对C语言原生的线程安全以及同步的API的封装,真的称得上是教科书式的,非常精妙、规范,很值得学习。 读者在阅读muduo源码的时候,看到类定义的类名称被一些宏定义修饰、以及类的成员变量被一些宏定义修饰时,可以直接忽略,无视这些宏。因为这些东西的存在完全不影响整体的功能。简单来说就是吓唬人的...
C++20的解决方案:智能指针的原子操作魔法 ✨ 还记得小王之前的烦恼吗?那些不听话的线程就像是在十字路口上横冲直撞的小汽车 🚗,每次都需要一个尽职尽责的交警(互斥锁)来维持秩序。这样虽然安全,但效率着实让人头疼!😫 不过不用担心,C++20给我们带来了一个超级法宝 - 原子智能指针 🚀!就像是给每个十字路口...