前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++ 动态内存《Rice C++ 学习开发》

C++ 动态内存《Rice C++ 学习开发》

作者头像
Rice加饭
发布2022-05-09 21:32:56
3250
发布2022-05-09 21:32:56
举报
文章被收录于专栏:Rice嵌入式

内存对于程序员来说,是一个必须要考虑的问题,单片机编程,应用编程,都是需要考虑内存的分配、释放。

栈、堆的简单说明;

栈:在函数内部声明的所有变量都将占用栈内存。

堆:在程序运行时可用于动态分配内存。

在C++提供了两个关键字new和delete,进行内存动态申请和释放。

new:在程序运行中奉陪堆内的内存,并返回所分配的空间地址。

用法:new为任意的数据类型分配动态内存,其中:new type。(type:可以内置的数据类型,例如:数组、类)。

例子:定义一个变量rice整形指针,为了防止内存空间不足,无法分配内存,所以加以判断内存申请是否返回NULL。

代码语言:javascript
复制
#include <iostream>
using namespace std;

int main()
{
    int *rice = NULL;

    if(!(rice = new int))
    {
        cout << "out of memory" << endl;
    }
    cout << rice << endl;
    return 0;
}

注:在C语言中申请内存使用malloc(),在C++也拥有malloc()来申请内存。但是C++中一般不适用malloc,而是使用new。new不只是分配内存,还可以创建对象。

delete:当不在占用动态内存时,通过delete动态释放内存。

用法:delete为任意的数据类型分配的内存释放,其中:delete val。(释放val所指向的内存)。

例子:在上一个例子中,将申请的内存,使用完释放掉。

代码语言:javascript
复制
#include <iostream>
using namespace std;

int main()
{
    int *rice = NULL;

    if(!(rice = new int))
    {
        cout << "out of memory" << endl;
    }
    cout << rice << endl;

    delete rice;

    return 0;
}

对象的动态内存的分配:根据具体类,通过new关键字,定义一个实体(对象)。(作为程序员有个人生大难题,没对象,地中海,大肚子。但是我们可以为自己创建对象,空虚的时候new一个)

例子:定义一个rice类,类内定义构造方法和析构方法,当通过new定义实体时,会调用类的构造方法,当通过delete释放实体内存时,会调用类的析构方法。

代码语言:javascript
复制
#include <iostream>
using namespace std;

class rice
{
   public:
      rice() {
         cout << "rice 构造函数" <<endl;
      }
      ~rice() {
         cout << "rice 析构函数" <<endl;
      }
};

int main( )
{
   rice *my_rice= new rice;

   delete my_rice;

   return 0;
}

注: 构造函数:

1.构造函数是一种特殊的成员函数,不需要用户来调用,定义对象时被自动执行。

2.构造函数名字与类名相同,无返回类型。

3.可以由用户自己定义实现,根据需要设计对数据成员进行初始化,依旧可以设置函数的默认参数。

4.如果我们没有定义构造函数,系统会为我们自动定义一个无参的默认构造函数的,它不对成员属性做任何操作,如果我们自己定义了构造函数,系统就不会为我们创建默认构造函数了。

析构函数:

1.析构函数没有返回值,没有参数;

2.没有参数,所以不能重载,一个类仅有一个析构函数;

3.析构函数除了释放工作,还可以做一些用户希望它做的一些工作,比如输出一些信息。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-08-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Rice 嵌入式开发技术分享 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档