c++(基础篇):函数、内存管理

  函数特性:

  1. 函数参数是可以有默认值的。
  void fun(int i,int j= 5,int k =10);
  有默认参数值的参数必须在参数表的最右端.
无实参则用默认值,否则实参覆盖默认值.

 2. 函数重载:
  在相同作用域下:
      同一个函数名、参数个数和参数类型不同
  e.g:
  int getMax(int x,int y,int z)
  double getMax(double x,double y)

  3. 内联函数:
  和普通的函数的主要区别是在调用上:
  普通函数:main()--(1)-->调用fun()--(2)-->fun()--(3)-->--(4)-->调用fun()--(5)-->结束
  内联函数: 编译时将函数体代码和实参代替函数调用语句。【注意是在编译的时候省掉了上述的(2)和(4)步骤,节省运行时间】
  (说白了,就是把函数的代码在编译的时候就替换掉调用的地方)
关键字:inline
  为什么不是所有的函数都使用内联方式?

  • 内联编译是建议性的,由编译器决定。
  • 逻辑简单、调用频繁的函数建议使用内联函数。
  • 递归函数无法使用内联方式。

    c++内存管理:申请/归还内存资源

1.内存的本质:资源

2.内存资源的掌控者:操作系统

3.开发者能做的关于资源:申请/归还。【高级语言像java有jvm进行GC】

内存的申请和释放:

  • 申请内存:new 
  • 释放内存:delete 

new 和delete是运算符而不是函数。

申请和释放"某一个类型"的内存:

  • 申请内存: int *p = new int;
  • 释放内存: delete p;

申请和释放 “块”内存:

  • 申请块内存:int *arr = new int[10];
  • 释放块内存: delete [ ]arr;

内存操作注意事项:

c中内存管理方式:

  • 申请:void *malloc(size_t size);
  • 释放: void free(void *memblock);

c++中内存管理方式:

  • 申请:new
  • 释放: delete

配套使用,不要混搭。

申请内存是否一定成功?

存在风险的,操作系统可能现在的内存已经用完了,没有办法给予更多的内存,需要我们对这种情况进行处理。

int *p = new int[1000];
if(NULL == p){
    // 内存分配失败
    // 异常处理
}

delete [] p ;
p = NULL;



//------------------------
int *p = new int;
if(NULL == p){
    // 内存分配失败
    // 异常处理
}

delete p ;
p = NULL;

释放内存的注意:

实际操作时,申请内存除了要判断分配内存失败的情况外,在失败的时候也要注意匹配,并在释放完内存后将相应的指针赋值为NULL避免莫名奇妙的错误。如果释放完内存指针还指向相应的内存,此时如果不小心又调用了一次delete,就会使得同1块内存被重复回收,计算机就会出现异常。

发布了268 篇原创文章 · 获赞 36 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/qq_39969226/article/details/104026069
今日推荐