C++04 new delete and initializer list

在这里插入图片描述
上图动态制造对象,动态内存分配。C++用了两个关键字,new(制造一个对象)和delete(把那个对象收回),相当于C language 的 malloc 和 free

new做两件事 第一是分配空间,对于int来说这样足够了 第二是对于像Stash这样的类在分配完空间之后,还要做一件事情是调用它构造函数。

构造函数一定会被调用在这个函数被创建的时候,无论这个对象是本地变量还是堆里面的变量。堆空间里的对象。

new和delete是cpp运算符,任何运算符一定有结果,new的结果就是地址。

delete p所指的那个对象时,它的析构函数先被调用,然后空间才被收回。

new is the way to allocate memory as a program runs, Pointers become the only access to that memory

delete enables you to return memory to the memory pool when you are finished with it

在这里插入图片描述可以用new的方式来申请数组,如上图new了10个int,

delete []psome 如果没有[],空间还是会被回收,但是析构只有第一个会被调用,[]告诉程序说psome所指的那个地方不是只有一个东西。delete 保证说psome所指的那么多个东西的那么多个析构都会被调用。
在这里插入图片描述

如上图,new int 的时候首先在堆空间里寻找一个空间,这个空间足够大,能够放下一个int , 然后p就指向了这个int, 与此同时有一张表记录下来你申请了这块内存。这个表记录两样东西,一个是这个内存地址在哪儿,另一个是这个内存大小,以字节为单位

在这里插入图片描述

申请了内存又没有释放它,就会造成内存泄漏。

访问限制

  • 类里private(私有的)和public(公开的),它们用来说类里的哪些成员可以被别人访问,哪些成员只能被自己访问。

  • 对于C++来说,所有访问成员可以是

  • public(任何人都可以访问),

  • private(只有这个类的成员函数可以访问这些成员变量或者成员函数)只在编译 的时候起作用,在运行的时候不起作用。

  • protected(只有这个类自己以及它的子子孙孙(子类以及子类的子类等等)可以访问)

  • 三种访问属性之一**
    private是对类来说的,不是对对象的,同一个类的对象之间是可以互相访问private成员变量的
    C++的OOP特性只在源代码级别上存在。编译出来的东西就不是C++,后面生产出来的.o,不管是C,C++,汇编都是一模一样的。所以编译成二进制代码过后,已经完全丧失了C++的所有东西。
    在这里插入图片描述

  • Friends,可以申明别的类,别的函数,别的类里面的某个函数是你的friends,它就可以访问你的private的东西了

class 与 struct

class defaults to private
struct defaults to public

即没有申明访问属性的地方,class默认私有,struct默认公开。

初始化列表(比构造函数还要早做)

在这里插入图片描述

在构造函数的原括号后面加上冒号,在冒号里面写上成员变量的名字,然后用括号来给出那个成员变量的初始值。

在这里插入图片描述

在这里插入图片描述

两种结果一样,不过第一种叫初始化第二种叫赋值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值