C++存储方案和动态分配

 更新时间:2021年12月31日 11:41:31   作者:公众号:Coder梁(ID:Coder_LT)  
这篇文章主要介绍了C++存储方案和动态分配,

存储方案和动态分配

在之前的文章当中,我们讨论了C++用来为变量分配内存的5种方案,但是这些方案并不适用于使用new运算符分配的内存,这种内存被称为动态内存。

我们在之前的文章当中也曾介绍过,动态内存由newdelete控制,而不是由作用域和链接性规则控制。所以我们可以在一个函数当中分配动态内存,在另外一个函数中释放。

通常C++编译器当中有三块独立的内存,一块用于静态变量,一块用于自动变量,还有一块用于动态存储。

虽然存储方案的概念不适用于动态内存,但是适用于动态内存的自动和静态指针。C++ Primer当中有这么一个例子,我们在一个函数当中有如下语句:

float * p_fees = new float[20];


很明显,我们通过new创建了一个长度为20的float数组,这块数组的内存将会一直停留在内存当中,直到使用delete语句释放。但当该函数运行结束的时候,p_fees这个指针将会消失。如果希望在其他地方能够使用这个数组,需要将地址通过某种方式返回或者传递。

如果我们将p_fees的链接性声明为外部的,那么我们在其他地方都可以访问到了,如果另外的文件当中需要访问,也同样可以使用关键字extern

初始化

前面讲了使用new申请内存的方法,如果我们想要在分配内存的同时完成变量的初始化,应该怎么办呢?

如果要为内置的标量类型分配空间并初始化,可以在类型名后面加上初始值,并将它用括号括起来:

int *pi = new int(3);
double *pd = new double(99.9);


如果我们要初始化结构体或者是数组,则需要使用大括号的列表初始化,这需要编译器支持C++11,这是C++11中的新特性:

struct P {
    int x, y;
};

P *p = new P{3, 4};
int *arr = new int[4] {2, 3, 4, 5};


在C++11当中也支持对单值变量使用列表初始化:

double *pd = new double(99.99);

到此这篇关于C++存储方案和动态分配的文章就介绍到这了,更多相关C++存储方案和动态分配内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C++实现教师管理系统

    C++实现教师管理系统

    这篇文章主要为大家详细介绍了C++实现教师管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • C++报错:Segmentation Fault的解决方案

    C++报错:Segmentation Fault的解决方案

    段错误(Segmentation Fault)是 C++ 编程中常见且令人头疼的错误之一,段错误通常发生在程序试图访问未被允许的内存区域时,导致程序崩溃,本文将深入探讨段错误的产生原因、检测方法及其预防和解决方案,需要的朋友可以参考下
    2024-07-07
  • 基于select、poll、epoll的区别详解

    基于select、poll、epoll的区别详解

    本篇文章是对select、poll、epoll之间的区别进行了详细的分析介绍。需要的朋友参考下
    2013-05-05
  • C++实现十六进制字符串转换成int整形值的示例

    C++实现十六进制字符串转换成int整形值的示例

    今天小编就为大家分享一篇关于C++实现十六进制字符串转换成int整形值的示例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • C++实现LeetCode(38.计数和读法)

    C++实现LeetCode(38.计数和读法)

    这篇文章主要介绍了C++实现LeetCode(38.计数和读法),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • Qt线程池QThreadPool的使用详解

    Qt线程池QThreadPool的使用详解

    本文主要介绍了Qt线程池QThreadPool的使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • 基于QT实现自定义温度计的示例代码

    基于QT实现自定义温度计的示例代码

    QT原生控件没有实现如仪表盘或者温度计的控件,只好自己实现,所以本文为大家介绍了如何利用qt实现自定义温度/湿度控件,感兴趣的小伙伴可以了解下
    2023-11-11
  • C语言数据结构不挂科指南之线性表详解

    C语言数据结构不挂科指南之线性表详解

    线性表是由 n(n≥0)个数据元素组成的有穷序列,这篇文章主要来和大家来了C语言数据结构中的线性表,感兴趣的小伙伴可以跟随小编一起了解一下
    2022-09-09
  • Qt Designer的简单使用方法

    Qt Designer的简单使用方法

    用 C++ 代码编写图形界面的问题就是不直观,因此 Qt 项目开发了专门的可视化图形界面编辑器,本文就详细的介绍一下
    2021-08-08
  • C语言实现电器销售管理系统

    C语言实现电器销售管理系统

    这篇文章主要为大家详细介绍了C语言实现电器销售管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06

最新评论