一、new和delete操作符
1、malloc free是函数,标准库,需要stdlib.h,new和delete是C++语言的操作符,因此执行效率高。
2、new 运算符动态分配堆内存
使用方式:
指针变量 = new 类型(常量);
指针变量 = new 类型[表达式];
作用:从堆分配一块“类型”大小的存储空间,返回首地址
其中:“常量”是初始值,可以缺省,创建数组对象时,不能为对象指定初始值
3、delete运算符释放已分配的内存空间
使用形式:
delete 指针变量;
delete [] 指针变量;
其中:“指针变量”必须是一个new返回的指针
4、malloc不会调用类的构造函数,而new会调用类的构造函数,free不会调用类的析构函数,而delete会调用类的析构函数
二、静态成员变量和成员函数
1、在C++中,静态成员是属于整个类。而非某个对象,静态成员变量只存储一份供所有对象共用。使用静态成员变量实现多个对象之间的数据共享而不破坏隐藏的原则,保证了安全性还可以节省内存。
2、静态成员变量在类内声明,类外初始化,如下:
//声明
static 数据类型 成员变量; //在类的内部
//初始化
数据类型 类名::静态数据成员 = 初值; //在类的外部
//调用
类名::静态数据成员
类对象.静态数据成员
注意:
(1)static成员变量实现了同类对象间信息共享
(2)static成员类外存储,求类大小,并不包含在内,static成员是命名空间属于类的全局变量,存储在data区
(3)static成员只能类外初始化
(4)可以通过类名访问,也可以通过对象访问
3、静态成员函数
类内函数声明,类外函数定义,如下所示:
//声明
static 函数声明
//调⽤
类名::函数调⽤
类对象.函数调⽤
注意:
静态成员函数只能访问类内的静态数据成员。原因:非静态成员函数,在调用时this指针被当作参数传进,而静态成员函数属于类,而不属于对象,没有this指针。
<br /><br />在
C++
里,有两种方法创建对象:<br />方法一:<br />ClassName object(param);<br />这样就声明了一个ClassName
类
型的object对象,
C++
会为它分配足够的存放对象所有
成员
的存储空间。<br />注意:为节省存储空间,
C++
创建对象时仅分配用于保存数据
成员
的空间,而
类
中定义的
成员
函数则被分配到存储空间中的一个公用区域,由该
类
的所有对象共享。<br />例如,我定义了一个这样的
类
:<br />class Rec<br />{<br />
期末考试完了,前段时间一直忙着复习所选课程的期末考试,便把博客落下了,现在要继续写了,还希望我的粉丝能够一如既往地支持下去。谢谢。
本次内容主要是涉及到三个大方面:静态
类
成员
、
new
-
delete
、复制
构造
函数
class String
private:
char * str;
int len;
static
int num_string;
public:
St...
前言:总所周知如果一个资源一旦读入就不需要修改,且多个线程都加载读取访问这个资源,那咱们就可以将这个资源声明为
static
类
型,多线共享,既节省内存资源,也可以加快多线初始化这个资源的时间(一旦有一个线程对资源进行了加载,其他线程可以跳过加载资源的环节)
问题:简答描述下吧: 我的测试程序里,
new
了这样
类
的对象的指针,并加载了资源,进行了一系列的操作后,我
delete
掉这个指针,然后又去做别的操作,但是发现
delete
的操作并没有释放掉这个
类
对象加载的资源内存,导致了即使后面我的程序不用这个
类
了,..
我们编写一个java
类
的代码,经过编译之后生成一个后缀名为.class的文件,java虚拟机就能识别这种文件。
java的生命周期就是class文件从加载到消亡的过程。
关于加载,其实,就是将源文件的class文件找到
类
的信息将其加载到方法区中,
然后在堆区中实例化一个java.lang.Class对象,作为方法区中这个
类
的信息的入口。
但是这一功能是在JVM之外
如果需要一个全局对象,如对话框、系统日志、显卡等设备的驱动程序对象、一台PC连接一个键盘等。这样的全局对象只能是一个且是全局的,这就是单例模式,如何实现呢?1 不能在
类
外部通过
构造
函数新建对象:
构造
函数的访问方式设置为private或protected。同时,拷贝
构造
函数和赋值运算符也是私有的,以禁止拷贝和赋值。2 能够通过调用一个
成员
函数来实例化一个对象:
成员
函数设置为
static
,这样可以在没...
static
关键字有5种用法
说到
static
,
静态变量
和静态方法大家随口就来,因为他们在实际开发中应用很广泛,但他们真正在
使用
的时候会存在很多问题,而且它的
使用
不只那两种:
静态代码块
静态内部
类
接下来我们看一下这些用法。
静态变量
属于
类
,内存中只有一个实例,当
类
被加载,就会为该
静态变量
分配内存空间。
跟 class 本身在一起存放在方法区中永远不会被回收,除非 JVM 退出。(方法区还存哪些东西可以看看:Java虚拟机运行时数据区域)
静态变量
的
使用
方式:【
C++
中建立
类
的对象有两种方式:
(1)静态建立,例如 A a;
静态建立一个
类
对象,就是由编译器为对象在栈空间中分配内存。
使用
这种方法,是直接调用
类
的
构造
函数。
(2)动态建立,例如 A* p =
new
A();
动态建立一个
类
对象,就是
使用
new
运算符为对象在堆空间中分配内存。这个过程分为两步:第一步执行o
知识点小结:
new
其实就是告诉计算机开辟一段新的空间,但是和一般的声明不同的是,
new
开辟的空间在堆上,而一般声明的变量存放在栈上。通常来说,当在局部函数中
new
出一段新的空间,该段空间在局部函数调用结束后仍然能够
使用
,可以用来向主函数传递参数。另外需要注意的是,
new
的
使用
格式,
new
出来的是一段空间的首地址。所以一般需要用指针来存放这段地址。具体的代码如下:
#include <...
学完
static
以后,同学们都觉得用
static
修饰的
成员
特别方便,不用创建对象就可以
使用
,而不用
static
修饰的
成员
倒显得麻烦了,非得创建对象才能
使用
,但我们平时定义方法时又很少
使用
static
。为什么呢,那什么时候用
static
,又什么时候不用
static
呢?我们抛开
static
成员
使用
的特点,理解一下
static
修饰
成员
的意义。
类
的一个
成员
被
static
修饰后,该
成员
就属于
类
的
成员
了,被所