C++动态内存的分配与释放 引用

new 运算符

1、指针变量 = new 数据类型, 如:int *p; p=new int;

2、new从内存中卫程序分配一块内存空间,并返回指向该内存的首地址,该地址存放于指针变量中

new

先分配内存,做复杂类型的构造

delete

释放

delete运算符

delete 指针变量; 如:delete p;

(1)用new获取内存空间,必须用delete进行释放

(2)对一个指针只能调用一次delete

(3)用delete运算符作用的对象必须是用new分配的内存间的首地址

注:C语言中有free()函数分配内存

new a;

delete []a;

#include <iostream>
using namespace std;
void main()
{
    int *p;
    p = new int;
    *p = 5;
    cout << *p;
    delete p;
}

可以在用new分配内存的同时进行初始化。使用形式为:

指针变量 = new 数据类型(初始值)

例如上面提到的

p = new int;

*p = 5;

也可以写成

p = new int(5);

用new建立数据类型的变量

指针变量 = new 数据类型[数组大小];

如:int *p = new int[5];

此时指针变量指向第一个数组元素的地址。使用new分配数组时,不能提供初始值。

作用域运算符:

通常情况下,如果全局变量与局部变量同名,那么局部变量在其作用域内具有较高的优先权

C语言规定只能在变量作用域内使用该变量,不能使用其他作用域的变量。而C++中提供了作用域运算符::,他能指定所需要的作用域。

注意:

不能用::访问函数中的局部变量

在C++语言中作用域运算符::还可以限定类的成员。

#include <iostream>
using namespace std;
float a=2.4;            //全局变量
void main()
{
    int a = 8;          //局部变量
    cout<<a<<endl;
    cout<<::a<<endl;        //::

}

引用

在C++语言中引用用于在程序的不同部分使用两个以上的变量名指向同一地址,不占用内存空间,引用申明的时候必须初始化,一旦初始化之后不能再对他赋另外的值,而指针不同第一个,指针是有空间的,第二个指针申明的时候可以不初始化然后指针一旦被赋值之后,还可以在赋值的。

#include <iostream>
using namespace std;
void main()
{
    int num = 50;
    int &ref = num;
    ref += 10;
    cout<<"num"<<num<<endl;
    cout<<"ref"<<ref<<endl;
    num += 40;
    cout<<"num"<<num<<endl;
    cout<<"ref"<<ref<<end;
}
时间: 2024-11-22 17:13:42

C++动态内存的分配与释放 引用的相关文章

C语言动态内存的申请和释放

什么是动态内存的申请和释放? 当程序运行到需要一个动态分配的变量时,必须向系统申请取得堆中的一块所需大小的存储空间,用于存储该变量.当不再使用该变量时,也就是它的生命结束时,要显式释放它所占用的存储空间,这样系统就能对该堆空间进行再次分配,做到重复使用有限的资源. 下面将介绍动态内存申请和释放的函数 1.malloc函数 在C语言中,使用malloc函数来申请内存.函数原型如下: #include<stdlib.h> void *malloc(size_t size); 参数size代表需要动

动态内存会被自动释放吗?

函数体内的局部变量在函数结束时自动消亡.很多人误以为示例7-6是正确的.理由是p是局部的指针变量,它消亡的时候会让它所指的动态内存一起完蛋.这是错觉! void Func(void) {     char *p = (char *) malloc(100);    // 动态内存会自动释放吗? } 我们发现指针有一些“似是而非”的特征: (1)指针消亡了,并不表示它所指的内存会被自动释放. (2)内存被释放了,并不表示指针会消亡或者成了NULL指针. 这表明释放内存并不是一件可以草率对待的事.也

《C语言中分配了动态内存后一定要释放吗?》

问:比如main函数里有一句 malloc(),后面没有free()1.那么当main结束后,动态分配的内存不会随之释放吗?2.如果程序结束能自动释放,那么还加上free(),是出于什么考虑? 答: 1. 就算没有free(),main()结束后也是会自动释放malloc()的内存的,这里监控者是操作系统,设计严谨的操作系统会登记每一块给每一个应用程序分配的内存,这使得它能够在应用程序本身失控的情况下仍然做到有效地回收内存.你可以试一下在TaskManager里强行结束你的程序,这样显然是没有执

C语言中动态内存的分配

动态内存分配:根据需要随时开辟,随时释放的内存分配方式.分配时机和释放时机完全由程序员决定,由于没有数据声明,这部分空间没有名字.无法像使用变量或数组那样通过变量名或数组名引用其中的数据,只能通过指针变量来访问.注意malloc与free一般都是成对出现的只要成功申请的空间使用完后必须要释放,否则会造成内存的泄露. 1 #include<stdio.h> 2 #include<stdlib.h> 3 int sum(int *,int);///函数的声明 4 int mian()

netty源码解解析(4.0)-23 ByteBuf内存管理:分配和释放

ByteBuf内存分配和释放由具体实现负责,抽象类型只定义的内存分配和释放的时机. 内存分配分两个阶段: 第一阶段,初始化时分配内存.第二阶段: 内存不够用时分配新的内存.ByteBuf抽象层没有定义第一阶段的行为,但定义了第二阶段的方法: public abstract ByteBuf capacity(int newCapacity) 这个方法负责分配一个长度为newCapacity的新内存. 内存释放的抽象实现在AbstractReferenceCountedByteBuf中实现,这个类实

C和C++动态内存的申请与释放思考

这里分配内存以数组为例,这样就建立了一种思维,肯定离不开数组与指针的关系,这两者的关系是一个永远的话题,具体的可以参见我的这篇文章,是关于数组与指针的下来我们开始动态内存分配方法之旅吧! C语言的: C++语言的: 版权声明:本文为博主原创文章,未经博主允许不得转载.

FFmpeg源代码简单分析:内存的分配和释放

本文简单记录一下FFmpeg中内存操作的函数. 内存操作的常见函数位于libavutil\mem.c中.本文记录FFmpeg开发中最常使用的几个函数:av_malloc(),av_realloc(),av_mallocz(),av_calloc(),av_free(),av_freep(). av_malloc() av_malloc()是FFmpeg中最常见的内存分配函数.它的定义如下. #define FF_MEMORY_POISON 0x2a #define ALIGN (HAVE_AVX

如何在MD(d)和MT(d)工程间正确分配和释放动态内存

MD(d)和MT(d) MD(d)和MT(d)是windows下VC开发的两个编译选项,表示程序的运行时库编译选项. /MT是"multithread, static version" 意思是多线程静态的版本,定义了它后,编译器把LIBCMT.lib安置到OBJ文件中,让链接器使用LIBCMT.lib 处理外部符号. /MD是"multithread- and DLL-specific version",意思是多线程DLL版本,定义了它后,编译器把MSVCRT.li

指针 &amp;&amp; 动态内存分配

C++中的动态内存分配机制 c++中使用new和delete来完成在堆上对动态内存的分配和释放. 注.所有指针都应该被初始化 如果指针指向的动态内存被释放或没有指向合法的地址,就应该将指针设置为nullptr,否则内存泄漏. 变量: double* pvalue {}; pvalue=new double; *pvalue=9.0; 或 double* pvalue {}; pvalue=new double {9.0}; 或合并为一句 double* pvalue {new double{9.