请回答C++进阶
文章平均质量分 97
言之命至9012
靡不有初,鲜克有终
展开
-
[请回答C++] C++11&智能指针&引用计数&weak_ptr
其实C++ 里也是有垃圾回收的,不过不是 Java、Go 那种严格意义上的垃圾回收,而是广义上的垃圾回收(太瓦了),这就是构造 / 析构函数和RAII 惯用法(Resource Acquisition IsInitialization)我们为什么需要智能指针?内存泄漏指因为疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并不是指内存在物理上的消失,而是应用程序分配某段内存后,因为设计错误,失去了对该段内存的控制,因而造成了内存的浪费内存泄漏的危害都了解:长期运行的程序出现内存泄漏,影响很大,如操原创 2022-10-01 10:08:02 · 396 阅读 · 0 评论 -
[请回答C++] C++11&lambda&thread&条件变量&包装器&atomic&unique_guard
lambda表达式是一个匿名函数,恰当使用lambda表达式可以让代码变得简洁,并且可以提高代码的可读性。lambda表达式有如下优点:在C++98中,如果想要对一个数据集合中的元素进行排序,可以使用std::sort方法。现在要对若干商品分别按照价格和数量进行升序、降序排序。下面是使用仿函数形式的表达方式: 仿函数确实能够解决这里的问题,但可能仿函数的定义位置可能和使用仿函数的地方隔得比较远,这就要求仿函数的命名必须要通俗易懂,否则会降低代码的可读性。lambda表达式书写格式:[capture-list原创 2022-09-30 17:10:40 · 201 阅读 · 0 评论 -
[请回答C++] C++11&&类默认函数&&final&&override&&可变参数模板&&emplace
这里的emplace_back是不支持大括号方式的初始化的,因为push_back知道data的类型emplace_back的构造是可变参数包形式被编译器推成了Initializer_list,所以不可以推出,可以用小括号直接传构造pair的参数,这是一种参数包的方式。而这个推演过程是在编译时进行的,当推演到参数包args中参数个数为0时,还需要将当前函数推演完毕,这时就会继续推演传入0个参数时的ShowList函数,此时就会产生报错,因为ShowList函数要求至少传入一个参数。原创 2022-09-29 15:21:34 · 402 阅读 · 0 评论 -
[请回答C++] C++11&&auto&&右值引用&&移动语义&&完美转发
该容器提供了begin和end函数,用于支持迭代器遍历。以及size函数支持获取容器中的元素个数。多个对象想要支持列表初始化,需给该类(模板类)添加一个带有initializer_list类型参数的构造函数即可。有两种使用方法initializer_list本质就是一个大括号括起来的列表,如果用auto关键字定义一个变量来接收一个大括号括起来的列表,然后以typeid(变量名).name()的方式查看该变量的类型,此时会发现该变量的类型就是initializer_list。原创 2022-09-28 20:07:10 · 561 阅读 · 3 评论 -
[请回答C++] 多态&&虚函数&&重写&&抽象类&&虚表&&动态绑定
多态是调用函数时是多种形态,分为静态多态和动态多态静态多态就是函数的重载动态多态就是父类指针或引用调用重写虚函数抽象类用来表示现实世界中没有具体实例对应的抽象类型抽象类强制重写了虚函数,必须让子类重写,另外抽象类体现出了接口继承关系。原创 2022-09-27 19:01:00 · 553 阅读 · 0 评论 -
[请回答C++] 继承&&菱形继承&&虚继承
下面我们看到Person是父类,也称作基类。Student是子类,也称作派生类。原创 2022-09-26 21:18:27 · 756 阅读 · 0 评论 -
[请回答C++] 设计特殊类&单例模式
🌿 将类的构造函数私有,拷贝构造声明成私有。防止别人调用拷贝在栈上生成对象🌿 成员函数,在该函数中完成堆对象的创建🌿 静态的成员函数 🌿 拷贝构造私有化或者delete关键字我通过拷贝构造还是可以栈上构建对象 于是操作拷贝构造,私有化和删除关键字二选一即可 请设计一个类,只能在栈上创建对象 方法1:私有化构造函数 类似的私有化构造,但是这次不可以私有化拷贝构造了因为,return返回对象是在栈上的,返回对象是需要拷贝构造临时变量的 方法2:屏蔽new 要么私有化要么删除,不过这个写法还有一个缺陷,可...原创 2022-07-05 17:17:27 · 427 阅读 · 0 评论