首页 > 百科知识 正文

动态内存分配,怎么给核显分配内存

时间:2024-03-25 14:00:01 阅读:606 作者:黑夜里失眠

动态内存分配技术可以保证程序在运动过程中按照实际需要申请适量的内存,使用结束后还可以释放,这种程序运行过程中申请和释放的内存单元也成为堆对象,申请和释放过程一般称为建立和删除。

在C 程序中建立和删除堆对象使用两个运算符:new 和delete。

动态内存分配,怎么给核显分配内存-第1张

new:

功能:动态分配内存,也可以称为动态创建堆对象。

语法形式:new 数据类型 (初始化参数列表);

该语句在程序运行过程中申请分配用于存放指定类型数据的内存空间,并根据初始化参数列表中给出的值进行初始化。如果内存申请成功, new运算便返回一个指向新分配内存首地址的类型的指针,可以通过这个指针对堆对象进行访问;如果申请失败,会抛出异常。

如果建立的对象是一个基本类型对象,初始化过程就是赋值,例如: int *Point; point=new int(2);动态分配了用于存放int类型数据的内存空间,并将初值2存入该空间中,然后将首地址赋给指针point。细节:对于基本数据类型,如果不希望再分配内存后设定初值,可以把括号省去,例如:int*point =new int;如果保留括号,但如果括号中不写任何数值,则可以用0对该对象初始化,例如:int *point=new int();

如果建立的对象是某一个类的实例对象,就是要根据初始化参数列表的参数类型和个数调用该类的构造函数。

delete:

功能:删除由new建立的对象,释放指针所指向的内存空间。

语法形式:delete 指针名;

如果被删除的是对象,该对象的析构函数将被调用。对于用new建立的对象,只能用delete进行一次删除操作,如果对同一内存空间多次使用delete进行删除将会导致运行错误。

注意:用new分配的内存,必须用delete加以释放,否则会导致动态分配的内存无法回收,使得程序占据的内存越来越大,这叫做“内存泄漏”。

动态内存分配,怎么给核显分配内存-第2张

实例(动态创建对象):

#include <iostream>

using namespace std;

class Point{

public:

Point():x(0),y(0){

cout<<"Default Constructor called."<<endl;

}

Point(int x,int y):x(x),y(y){

cout<<"Constructor called."<<endl;

}

~Point(){cout<<"Destructor called."<<endl;}

int getX(){return x;}

int getY(){return y;}

void move(int newX,int newY){

x=newX;

y=newY;

}

private:

int x,y;

};

int main() {

cout<<"Step one:"<<endl;

Point *ptr1=new Point; //动态创建对象,没有给出参数列表,调用默认构造函数

delete ptr1; //删除对象,自动调用析构函数

cout<<"Step two:"<<endl;

ptr1=new Point(1,2); //动态创建对象,并给出参数列表,调用有形参的构造函数

delete ptr1; //删除对象,自动调用析构函数。

return 0;

}

/*运行结果:

Step one:

Default Constructor called.

Destructor called.

Step two:

Constructor called.

Destructor called.*/

动态内存分配,怎么给核显分配内存-第3张

版权声明:该问答观点仅代表作者本人。如有侵犯您版权权利请告知 cpumjj@hotmail.com,我们将尽快删除相关内容。