C++中静态成员变量与静态成员函数,以及malloc , free , new , delete ,区别

int * p = (int * ) malloc(sizeof(int) ) ; 

int * p = (int * ) malloc(sizeof(int)*10);   生成一个数组的空间


int * p = new int (10) ;  生成一个int型内存空间,并指向 10 

int * p = new int[10]  ;  生成数组的空间。



也可以用malloc 来生成类对象空间

classname  * p1 = (classname * )malloc(sizeof(classname)) ;

free(p1) ;


C++里 

classname *p1 = new class(10) ;    会调用构造函数 。

delete (p1) ; 会调用析构函数。


malloc  和 free  属于C语言的函数 。 

new  和 delete 属于C++的操作符。  生成对象时 会调用构造函数,释放空间时会调用析构函数。  而 malloc 和  free 则不会。 而且,new生成空间时可同时初始化类对象。


对于生成各种基础类型(int ,double ,float 等类型的空间,包括各种类型的数组)  malloc 可和 delete搭档 , new 可和 free 搭档  ,不会出现问题。 


类的静态成员变量   eg .  class A {   private : static int  num  ;}   其中,静态成员变量为所有该类对象所共有,初始化时不能在类声明里。

类的静态成员函数   eg.class A { public : static void get () ; }   

调用方法 ,1 类对象名 ::get  ,

    2  类名::get 

使用方法,静态成员函数中能够使用静态成员变量,但是不能使用普通类型成员变量。

C++里如果需要调一个在类里,但跟类的实例无关的函数,就需要 ((T*)NULL)->Func();

C++编译器里 struct stud { int name1 ; int name2 ; static int name3} sizeof(stud) 值为8 ,

class stud { int name1 ; int name2 ; static int name3 ; void get() ; } sizeof(stud) 值为8


成员变量和成员函数时分开存储的。 普通成员变量:存储于对象中,与struct变量有相同的内存布局和字节对齐方式。

静态成员变量: 存储于全局数据区中。

成员函数:存储于代码段中。 所有对象共用一块代码。 通过this指针来区分属于哪个类对象的代码。(静态成员函数不包含指向具体对象的指针)




顺便提一下C语言内存的四区模型

内存四区模型:
操作系统给C/C++编写的程序分配内存,通常将分配的内存划分为以下四个区域:
1.栈区:存放局部变量,用完由操作系统自动释放
2.堆区:动态分配给程序的内存区域,由程序员手动释放
3.数据区:分为两种:
(1)常量区:存放常量,一般是字符串常量
(2)全局区/静态区:存放全局变量和静态变量
4.代码区:存放可执行代码的区域


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值