c++基本语言知识

指针与引用的区别

  1. 指针有一块自己空间,引用只是一个别名
  2. 使用sizeof看成一个指针的大小是4,引用则是被引用对象的大小
  3. 指针可以初始化为NULL,引用必须初始化,并且应该是一个已有对象的引用
  4. 参数传递的时候,指针需要解引用才可以对对象进行操作,而直接对引用的修改就可以改变引用所指向的对象
  5. 可以有const指针,但是没有const引用
  6. 指针在使用的时候,可以指向其他对象,但是引用只能是一个对象的引用,不能改变
  7. 指针有多级指针,但是引用只有一级
  8. 指针和引用使用加加运算符的意义不一样
  9. 如果返回动态内存分配的空间或者内存,必须使用指针,引用可以引起内存泄漏

c++中的四个智能指针

智能指针就是可以采用计数的方式,记录当前内存资源被多少智能 指针引用,该引用计数的内存在堆上分配,
auto_ptr,shared_ptr,weak_ptr,unique_ptr
智能指针的作用就是管理一个指针,比如申请的空间在函数结束的时候,忘记释放,造成内存泄漏,使用智能指针,可以很大程度上解决这个问题, 智能指针就是一个类,当超出类的作用域,类就会自动调用析构函数,析构函数就会自动释放内存,智能指针的作用就是在函数结束的时候自动释放内存,不用手动的释放。unique就是独占拥有或者严格 拥有的概念,保证同一时间内只有一个智能 指针可以指向该对象。可以避免资源泄漏。
shared——ptr,多个指针可以指向相同对象,该对象以及相关资源就会在最后一个引用被销毁的时候释放,使用计数器表明资源被几个指针共享。
成员函数就是
use——count,返回引用计数的个数
unique返回是否是独占所有权
swap 交换两个share-ptr对象
reset放弃内部对象的多有权或拥有对象的变更,会引起原有对象引用计数的减少
get返回内部对象的指针,
,weak_ptr可以检测到所有非法的指针是否都已经被释放。

数组和指针的区别

指针数组
保存数据地址保存数据
间接访问数据,首先获得指针的内容,然后将其作为地址,从该地址中提取数据直接访问数据
通常用于动态的数据结构通常用于固定数目且数据类型 相同的元素
通过Malloc分配内存 free释放内存隐的分配和删除内存
通常 指向匿名数据,操作匿名函数自身就是数据名

c++为什么析构函数都是虚函数,为什么c++ 默认的析构函数不是虚函数,

将可能会被继承的父类的析构函数设置为虚函数,可以保证当我们new一个子类的时候,然后使用一个基类指针指向 子类的对象,释放基类指针的时候,可以释放子类的空间,防止内训泄漏
c++ 默认的析构函数不是虚函数,因为虚函数需要额外的虚函数表和虚表指针,占用额外的内存,而对于不会被继承的类来说,析构函数如果是虚函数,就会浪费内存,只有需要当做父类的时候,才会设置为虚函数。

函数指针

函数指针就是指向函数的指针变量,该指针变量指向一个具体的函数,编译的时候,每个函数都有一个入口地址,入口地址就是函数指针所指向的地址, 有了指向函数的指针变量后,可以用改指针变量调用改函数,就如同指针变量可以可使用其他类型的变量一样。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值