![](https://img-blog.csdnimg.cn/2020122919540978.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C++ 基础
C++学习过程中的问题集
爱吃煎饺的LinV
临渊慕鱼?退而结网!
展开
-
构造函数、析构函数与普通函数的区别
构造函数、析构函数与普通函数的区别:调用方式不一样:普通函数:显示调用;构造函数、析构函数:隐式调用;作用不一样:构造函数用来实例化对象;析构函数用来释放资源;原创 2021-04-24 15:52:53 · 413 阅读 · 0 评论 -
什么是虚函数?什么是纯虚函数?两者有什么区别?
什么是虚函数?被 virtual 关键字修饰的成员函数称为虚函数。虚函数的作用是实现多态性,即通过基类访问派生类的函数。什么是纯虚函数?在虚函数后面添加 =0 ,虚函数就成为纯虚函数,在很多情况下,基类生成对象很不合理。为了解决这个问题,引入了纯虚函数的概念,将函数定义为纯虚函数,派生类中必须重写实现纯虚函数。对于实现了纯虚函数的子类,该纯虚函数在子类中就变成了虚函数。虚函数和纯虚函数有什么区别?虚函数定义形式:成员函数前添加 virtual 关键字,纯虚函数在虚函数后添加 =0 ;含有纯转载 2021-04-23 20:15:33 · 7166 阅读 · 2 评论 -
shared_ptr的简单实现
#pragma oncetemplate<class T>class SharedPointer{public: //默认构造函数 SharedPointer():m_refCount(nullptr), m_pointer(nullptr){} //构造函数 SharedPointer(T* adoptTarget):m_pointer(adoptTarget), m_refCount(nullptr) { addReferen转载 2021-04-21 11:29:26 · 143 阅读 · 0 评论 -
C++中的四种智能指针
auto_ptr:auto_ptr是C98的标准,C11已经抛弃。auto_ptr是C++标准库提供的类模板,auto_ptr通过初始化指向由new创建的动态内存,它是这块内存的拥有者,一块内存不能同时被分配给两个auto_ptr,auto_ptr采用的是所有权的模式。auto_ptr被赋值或拷贝后,失去对原指针的管理。auto_ptr不能作为容器对象,因为STL的容器经常要拷贝、赋值等操作。例如:auto_ptr<string> p1(new string("I reigned原创 2021-04-08 15:08:35 · 139 阅读 · 0 评论 -
C++为什么使用智能指针?C++有哪些智能指针?
C++的指针有个明显的缺点,必须手动申请内存和释放内存。如果在函数中手动申请内存,最后却没有释放内存,这将导致内存泄漏。使用智能指针可以在很大程度上解决这类问题。智能指针首先是个类,当类离开作用域时,会自动执行析构函数释放资源。把释放内存的操作写入析构函数,那么释放内存的操作就会自动执行。所以说,使用智能指针可以在很大程度上解决指针不主动释放内存导致的错误。C++有以下智能指针:auto_ptrshared_ptrweak_ptrunique_ptr...原创 2021-01-25 21:03:00 · 392 阅读 · 0 评论 -
C++/C中指针和引用的区别
内存指针有自己的内存空间,引用只是别名;sizeof指针,显示指针的大小为4,sizeof引用,显示被引用对象的大小;赋值指针可以被初始化为NULL,引用必须被初始化为一个已有对象的引用;指针在使用中可以指向其他对象,引用只能是一个对象的引用,不能改变;函数作为函数参数传递时,指针需要解引用才可以对对象进行操作,引用不需要,而且对引用的修改会改变引用所指向的对象;如果返回动态内存分配的对象或者内存,必须使用指针,引用可能引起内存泄漏;层级指针可以有多级指针,引用只有一.原创 2021-01-23 15:20:21 · 63 阅读 · 0 评论 -
C++中的四种类型转换
C++中的四种类型转换:const_cast、static_cast、dynamic_cast、reinterpret_cast;const_cast用于将const变量转为非const;static_cast用于各种隐式转换,比如非const转const,void*转指针等,static_cast能用于多态向上转化,如果向下转,能成功但是不安全,结果未知;dynamic_cast用于动态类型转换。只能用于含有虚函数的类,用于类层次间的向上和向下转化。只能转指针或引用。向下转化时,如原创 2021-01-22 11:02:52 · 257 阅读 · 4 评论 -
C++和C的区别
设计思想上:c++是面向对象的语言,c是面向过程的结构化编程语言;语法上:C++具有重载、继承、多态的特性;C++相比C,增加了许多类型安全的功能,比如强制类型转换;C++支持范式编程,比如模板类、模板函数等。...原创 2021-01-21 09:47:52 · 84 阅读 · 0 评论 -
static关键字的作用
对变量而言:全局静态变量:定义:在全局变量前加上关键字static,全局变量就定义成全局静态变量;存储位置:静态存储区,在整个程序运行期间一直存在;初始化:未初始化的全局静态变量会被默认初始化为0;作用域:从定义开始到文件结尾,除声明它的文件外不可见。局部静态变量:定义:在局部变量之前加上关键字static,局部变量就定义成局部静态变量;存储位置:静态存储区;初始化:未初始化的全局静态变量会被默认初始化为0;作用域:局部作用域,当定义它的函数或者语句块结束时,作用域结束;但是.原创 2021-01-20 14:28:53 · 101 阅读 · 0 评论 -
const关键字的作用
修饰变量时:阻止变量的内容被改变;修饰指针时:可以指定指针本身为const,指针常量;也可以指定指针所指的数据为const,常量指针,或二者同时指定为const;修饰函数参数时:表明这是一个输入参数,在函数内部不能改变;修饰类的成员函数时:表明是一个常函数,不能修改类的成员变量。对于类的成员函数,有时候必须指定其返回值为const类型,以使得其返回值不为“左值”。...转载 2021-01-18 10:44:20 · 89 阅读 · 0 评论 -
vscode c++ debug vector显示不全的解决方案
问题描述:vscode c++在debug调试时vector内容显示不全的问题,详细内容显示如下:解决方案:在监视(watch)内添加表达式,格式如下*(type(*)[size])array_name最终效果:原创 2021-01-13 17:30:31 · 3755 阅读 · 1 评论 -
new和malloc的区别
malloc和free是c++/c语言的库函数,需要头文件支持;new和delete是C++的关键字,需要编译器支持;使用new操作符申请内存分配时,无需指定内存块的大小,编译器会根据类型信息自行计算。而malloc则需要显示地支持所需内存的大小。new操作符内存分配成功时,返回的是对象类型的指针,类型严格与对象匹配,无需进行类型转换,故new是符合类型安全性的操作符。而malloc内存分配成功则是返回void*,需要通过强制类型转换将void*指针转换成我们需要的类型。new内存分配..转载 2020-12-29 20:16:03 · 115 阅读 · 0 评论