动态内存与命名空间

动态内存
C语言:malloc realloc calloc free
C++语言:new delete
1.C语言的动态分配是通过函数,C++是通过运算符
2.C语言的动态分配不能和C++混用
new和delete的用法
new两种用法:1.分配单个内存;2.分配连续内存
分配单个内存也有两种情况:1.分配单个内存并不初始化 2.分配单个内存并且初始化
delete的两种用法:1.释放单个内存 2.释放连续内存
如果单个内存,delete就释放单个内存,只有new连续内存,才释放连续内存

使用动态内存时需要注意:
1.内存没有分配就使用:
int *p;*p=10;
解决办法:习惯变量初始化:不仅仅是变量,指针变量习惯初始化NULL;在使用指针之前习惯检查指针非空
2.内存分配成功,但没有初始化就使用它:
int *p=new int;printf("%d",*p);
解决办法:指针变量习惯初始化NULL;在使用指针前习惯检查指针非空
3.内存分配成功,也初始化了,但操作越界
int *p=new int[4];for(int i=0;i<=4;i++){*(p+1)=i+1;}
解决办法:写代码留意
4.忘记释放内存,造成内存泄漏
for(int i=0;i<4;++i){int *p=new int[4];}
解决办法:习惯在动态内存分配时就立马写上释放,让分配和释放逻辑配对
5.释放了内存,却继续使用它
int *p=new int;*p=10;delete p;*p=2;
指针释放后赋空;

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

int *p1=new int;(分配单个内存,并不初始化)
delete p;

int *p1=new int(1);(分配单个内存,并初始化)

int *p2=new int[4];(分配多个内存,并不初始化)

int *p2=new int[4];(分配多个内存,并初始化)
for(int i=0;i<4;i++){p2[i]=i+1;}
delete[] p2;
二级指针?

命名空间
在文件的基础上,对文件里面的内容再次进行分类
命名空间的语法格式:
namespace 空间表示符
{
命名空间成员
}
花括号只有两种情况:1.定义域(必须加分号)2.作用域(可加可不加)

命名空间注意事项:
1.命名空间标识符必须满足标识符命名规则,习惯名字唯一,通常以开发团队来命名
2.命名空间可以在全局,也可以在局部(命名空间接受嵌套定义),但不能在函数类中定义
3.命名空间花括是作用域
4.注意命名污染,尽量规避同名的出现

命名空间的访问:
1.using声明:using myTools::myMul;
放开一个成员的可见性,这个成员可以在空间外可见(建议使用)
2.using指示:using namespace myMul;
放开该命名空间的所有权限(所有成员都在空间外可见),适用于空间中大部分成员多次被调用
3.命名空间名称::空间成员名称

面向对象
面向对象编程思维
C语言是面向过程编程
优点:易于理解
缺点:不利于扩展和维护
对于程序代码,吧代码分解为若干模块(函数),这是一个过程式的设计
函数是主体

C++是面向对象的编程
优点:利于扩展和维护
缺点:不易于理解
数据是主体,函数是数据的接口

面向对象允许设计者从局部开始设计,逐步加深对整个系统的了解

面向对象的特点:
基于对象的设计思路在结构上更加稳定
避免传统程序设计中数据和操作的潜在不一致性
软件可以看做对象与对象之间关系的组合
软件的可从用性高

猜你喜欢

转载自www.cnblogs.com/superdhj/p/13190116.html