1,这些新引入的成员想要解决 C 语言中存在的一些问题,

2,动态内存分配:

1,C++ 中的动态内存分配:

1,C++ 中通过 new 关键字进行基于类型的动态内存申请;

1,C 语言中自身不包含动态内存分配的内容,通过 malloc 库函数基于字节进行;

2,C++ 中的动态内存申请是基于类型进行的;

3,delete 关键字用于内存释放;

4,变量申请:

Type* pointer = new Type;

// ......,和 C 语言中的使用方式相同;

delete pointer;

5,数组申请:

 Type* pointer = new Type[N];  // N 表示数组包含的元素个数;
// ......,和 C 语言中的使用方式相同;
delete[] pointer; // 要加上中括号,否则只释放了数组占用的第一个内存空间,剩下的内存空间都没有释放,造成内存泄漏;

3,C++ 中的动态内存分配实例分析:

1,main.cpp 文件:

 #include <stdio.h>

 int main()
{
int* p = new int; *p = ;
*p = *p + ; printf("p = %p\n", p);
printf("*p = %d\n", *p); delete p; printf("p = %p\n", p); p = new int[]; // p 所指向的这片内存空间至少占用了 40 字节; for(int i=; i<; i++)
{
p[i] = i + ; // 像数组一样使用; printf("p[%d] = %d\n", i, p[i]);
} delete[] p; return ;
}

2,输出结果:

 p = 0x9e4e008
*p =
p = 0x9e4e008 //这个结果说明,释放的是指向的空间,但是这个时候指针的值还是原来的值;
p[] =
p[] =
p[] =
p[] =
p[] =
p[] =
p[] =
p[] =
p[] =
p[] =

3,本质上和使用 malloc 和 free 没有太大差异,只不过说在使用体验上变得更好;

4,new 关键字与 malloc 函数的区别:

1,new 关键字是 C++ 的一部分;

2,malloc 是由 C 库提供的函数;

1,如果 C 语言编译器无法提供库函数,那么 C 语言编译器无法进行动态内存分配;

3,new 以具体类型为单位进行内存分配;

4,malloc 以字节为单位进行内存分配;

5,new 在申请单个类型变量时可以进行初始化;

1,这是要注意的区别;

6,malloc 不具备内存初始化的特性;

1,calloc 先申请,然后全部设置为 0,这不是真正意义上的初始化;

5,new 关键字的初始化:

1,代码示例:

 int* pi = new int();
float* pf = new float(2.0f);
char* pc = new char('c);

6,初始化动态内存编程实验:

1,main.cpp 文件:

 #include <stdio.h>

 int main()
{
int* pi = new int(); // 申请 int 并初始化为 1;
// int* pa = new int[1]; // 申请一个 int 大小的数组; float* pf = new float(2.0f);
char* pc = new char('c'); printf("*pi = %d\n", *pi);
printf("*pf = %f\n", *pf);
printf("*pc = %c\n", *pc); delete pi;
delete pf;
delete pc; return ;
}

2,输出结果:

*pi = 1

*pf = 2.000000

*pc = c

7,C++ 中的命名空间:

1,在 C 语言中只有一个全局作用域;

1,C 语言中所有的全局标识符共享同一个作用域;

1,每个函数的函数体就是局部作用域;

2,标识符之间可能发生冲突;

1,工程中能不用全局作用域就不用全局作用域,因为工程上往往很多人同时进行开发,可能造成自己和别人定义的全局变量相冲突,这样会浪费精力解决冲突;

2,C++ 中提出了命名空间的概念:

1,命名空间将全局作用域分成不同的部分;

1,全局作用域还是只有一个;

2,不同的部分就是 C++ 概念上的命名空间;

2,不同的命名空间中的标识符可以同名而不会发生冲突;

1,最大的意义是可以避免全局作用域当中的同名全局变量发生冲突;

3,命名空间可以相互嵌套;

1,命名空间可以细分,即嵌套;

4,全局作用域也叫默认命名空间;

8,C++ 命名空间的定义:

1,代码示例:

 namespace Name
{
namespace Internal
{
/* ... */
} /* ... */
}

2,无论如何划分,它们的本质还是全局作用域,也就是说不同的命名空间中所定义的变量和函数还是全局变量和全局函数;

9,C++ 命名空间的使用:

1,使用整个命名空间:using namespace name;;

2,使用命名空间中的变量:using name::variable;;

3,使用默认命名空间中的变量:::variable;

10,命名空间的使用实例分析:

1,main.cpp 文件:

 #include <stdio.h>

 namespace First  // 将全局作用域进行第一次划分;
{
int i = ; // 全局变量;
} namespace Second // 将全局作用域进行第二次划分;
{
int i = ; //全局变量,和上面的 i 不同,因为位于不同的命名空间; namespace Internal // 将全局作用域进行第三次划分;
{
struct P
{
int x;
int y;
};
}
} int main()
{
using namespace First;
using Second::Internal::P; printf("First::i = %d\n", i); // i 是 First 中的,因为申请了用 First 中的命名空间;
printf("Second::i = %d\n", Second::i); P p = {, }; printf("p.x = %d\n", p.x);
printf("p.y = %d\n", p.y); return ;
}

2,输出结果:

 First::i = 0

   Second::i = 1

   p.x = 2

   p.y = 3

11,小结:

1,C++ 中内置了动态内存分配的专用关键字;

2,C++ 中的动态内存分配可以同时进行初始化;

3,C++ 中的动态内存分配是基于类型进行的;

1,C++ 是强类型的语言;

4,C++ 中命名空间概念用于解决名称冲突问题;

C++ 中的new、malloc、namespace的更多相关文章

  1. C++中new和malloc的区别

    原文:http://blog.163.com/ji_wei8888/blog/static/4868044620117361747282/ 1.new 是c++中的操作符,malloc是c 中的一个函 ...

  2. C++中new和malloc区别

    面试中new和malloc区别会被经常问到,审视了自己,发现不知道该怎么表达 整理一下: 1.从属性 new/delete是C++关键字,需要编译器支持: malloc/free是库函数,需要头文件支 ...

  3. [转发]C++中new和malloc的区别

    原文地址:https://blog.csdn.net/linux_ever/article/details/50533149 new与malloc的10点区别 1. 申请的内存所在位置 new操作符从 ...

  4. Struts2 - Interceptor中取得ActionName、Namespace、Method

    在Struts2的Interceptor中取得当前执行对应的ActionName.Namespace.Method方法: 可以使用: System.out.println(invocation.get ...

  5. django 2中的app_name和namespace

    最近看<精通DJANGO>里遇到的疑惑. 简书URL如下: https://www.jianshu.com/p/404500a0408a 其中的官方解释: 应用命名空间 它表示正在部署的应 ...

  6. [C++] 头文件中不要用using namespace std

    先总结下: 1. using namespce std:尽量不要(或者强硬一点,不许)在头文件中使用. 解析: 不让这么用,主要原因就是防止名字重复(即自定义变量名和std中名字重复),因为头文件会被 ...

  7. C++中new和malloc

    1.malloc的工作原理: malloc使用一个数据结构(链表)来维护分配空间链表的构成:分配的空间/上一个空间的数据/下一个空间/空间大小等信息.    对malloc分配的空间不要越界访问,因为 ...

  8. IDEA 中使用 Vue 提示 namespace is not bound

    今天在 IDEA 中使用 vue.js 时提示我如下错误信息 解决方法: 把这个校验项目去掉就可以了.

  9. 我的探究:为什么.h头文件中不要写using namespace std

  10. 4.C++中的函数重载,C++调用C代码,new/delete关键字,namespace(命名空间)

    本章主要内容: 1)函数重载 2)C++调用C代码 3)new/delete关键字实现动态内存分配 4)namespace命名空间 大家都知道,在生活中,动词和不同的名词搭配一起,意义都会大有不同,比 ...

随机推荐

  1. 【长郡NOIP2014模拟10.22】搞笑的代码

    题目 在OI界存在着一位传奇选手--QQ,他总是以风格迥异的搞笑代码受世人围观 某次某道题目的输入是一个排列,他使用了以下伪代码来生成数据 while 序列长度<n do { 随机生成一个整数属 ...

  2. nodejs中 require 方法的加载规则

    require参数类型 http.fs.path等,原生模块 ./mod或../mod,相对路径的文件模块 /pathtomodule/mod,绝对路径的文件模块 mod,非原生模块的文件模块 在进 ...

  3. LDA主题模型评估方法–Perplexity

    在LDA主题模型之后,需要对模型的好坏进行评估,以此依据,判断改进的参数或者算法的建模能力. Blei先生在论文<Latent Dirichlet Allocation>实验中用的是Per ...

  4. python3---99乘法表

    参考: http://www.cnblogs.com/suiy-160428/p/5594389.html #!/usr/bin/env pythonfor i in range(1,10): for ...

  5. 通过 PHP 生成 XML

    如需使用 PHP 在服务器上生成 XML 响应,请使用下面的代码: <?php header("Content-type:text/xml"); echo "< ...

  6. POJ 1236 学校传数据 强连通+缩点+DAG

    题意描述: 网络中有一些学校,每个学校可以分发软件给其他学校.可以向哪个分发取决于他们各自维护的一个清单. 两个问题 1:至少要copy多少份新软件给那些学校, 才能使得每个学校都能得到. 2:要在所 ...

  7. luogu P1314 聪明的质监员 x

    P1314 聪明的质监员(至于为什么选择这个题目,可能是我觉得比较好玩呗) 题目描述 小T 是一名质量监督员,最近负责检验一批矿产的质量.这批矿产共有 n 个矿石,从 1到n 逐一编号,每个矿石都有自 ...

  8. HDU3465--Life is a Line(树状数组求逆序数,离散化)

    Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others) Total Submission(s ...

  9. Django REST framework 之 认证 权限 限制

    认证是确定你是谁 权限是指你有没有访问这个接口的权限 限制主要是指限制你的访问频率 认证 REST framework 提供了一些开箱即用的身份验证方案,并且还允许你实现自定义方案. 接下类我们就自己 ...

  10. webrtc相关概念

    SDP Session Description Protocol Session Traversal Utilities for NAT(STUN)Traversal Using Relays aro ...