【C++深度剖析学习总结】 10 C++ 中的新成员new

举报
CodeAllen 发表于 2021/10/29 22:55:03 2021/10/29
【摘要】 【C++深度剖析学习总结】 10 C++ 中的新成员new 作者 CodeAllen ,转载请注明出处 1.动态内存分配 C++中通过new关键字进行动态内存申请 C++中的动态内存申请...

【C++深度剖析学习总结】 10 C++ 中的新成员new

作者 CodeAllen ,转载请注明出处


1.动态内存分配
C++中通过new关键字进行动态内存申请
C++中的动态内存申请是基于类型进行的
delete关键字用于内存释放
在这里插入图片描述

10-1 C++中的动态内存分配

#include <stdio.h>
int main()
{
    int* p = new int;
    
    *p = 5;
    *p = *p + 10;
    
    printf("p = %p\n", p);
    printf("*p = %d\n", *p);
    
    delete p;
    
    p = new int[10]; //p所指向的数组空间至少占用40个字节空间
    
    for(int i=0; i<10; i++)
    {
        p[i] = i + 1;
        
        printf("p[%d] = %d\n", i, p[i]);
    }
    
    delete[] p;
    
    return 0;
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

运行结果
在这里插入图片描述

new关键字与malloc函数的区别

new关键字是C++的一部分
malloc是由C库提供的函数
new以具体类型为单位进行内存分配
malloc以字节为单位进行内存分配
new在申请单个类型变量时可进行初始化
malloc不具备内存初始化的特性

new关键字的初始化
在这里插入图片描述

10-2 初始化动态内存

#include <stdio.h>
int main()
{                       //两行代码区别
    int* pi = new int(1);   //申请单个变量,并初始化为1
// int* pa = new int[1]; //申请数组空间,大小为1,pa指向只有一个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 0;
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

运行结果
在这里插入图片描述

2.C++中的命名空间
在C语言中只有一个全局作用域
C语言中所有的全局标识符共享同一个作用域
标识符之间可能发生冲突
C++中提出了命名空间的概念
命名空间将全局作用域分成不同的部分
不同命名空间中的标识符号同名且不会发生冲突
命名空间可以相互嵌套
全局作用域也叫默认命名空间

C++命名空间的定义
在这里插入图片描述

C++命名空间的使用
使用整个命名空间:using namespace name;
使用命名空间中的变量:using name::variable;
使用默认命名空间中的变量:::variable

10-3 命名空间的使用

#include <stdio.h>
namespace First
{
    int i = 0;
}
namespace Second
{
    int i = 1;
    
    namespace Internal
    {
        struct P
        {
            int x;
            int y;
        };
    }
}
int main()
{
    using namespace First;
    using Second::Internal::P; //使用结构体
    
    printf("First::i = %d\n", i);
    printf("Second::i = %d\n", Second::i);
    
    P p = {2, 3};
    
    printf("p.x = %d\n", p.x);
    printf("p.y = %d\n", p.y);
    
    return 0;
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

运行结果
在这里插入图片描述

小结
C++中内置了动态内存分配的专用关键字
C++中的动态内存分配可以同时进行初始化
C++中的动态内存分配是基于类型进行的
C++中命名空间概念用于解决名称冲突问题

文章来源: allen5g.blog.csdn.net,作者:CodeAllen的博客,版权归原作者所有,如需转载,请联系作者。

原文链接:allen5g.blog.csdn.net/article/details/103544474

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。