new关键字
在C++中,当我们在函数内声明一个变量时,变量会被放在栈(stack)中。栈中的内存离开代码块就被释放了。而且栈的内存很小,当我们声明了大量变量可能会导致内存不足。
内存除了栈以外,还有堆(heap),当我们在函数外声明一个全局变量时,这个变量就放在堆上。堆是程序未使用的内存,可以被动态分配。当我们在堆上申请空间时,申请到的空间并不会自动释放,而是需要我们去手动释放内存。
new关键字就可以为任意数据类型动态分配内存空间。
data-type* pointer = new data-type;
data-type* pointer = new data-type[N]; // 数组
在c++中我们依然可以使用malloc来动态分配内存空间,但是不推荐这样做。我会在后面的代码例子中体现出来。
new申请到的空间不再使用时,需要用delete关键字释放内存。
delete pointer; // pointer是指向new申请的内存
delete [] pointer; // 删除数组
例子:
#include<iostream>
class Entity {
private:
std::string m_name;
public:
Entity():m_name("Unknowen") {}
Entity(std::string name) :m_name(name) {}
void printName() {
std::cout << m_name << std::endl;
};
};
int main() {
int a = 2; // 没有使用new
int* b = new int[20]; // 使用new在堆上分配空间(这里分配了80个字节)
Entity e("OrzMiku"); // 没有使用new
/*
下面这俩是有区别的
e1有初始化,调用了默认的构造函数
e2只是分配了对应大小的内存,没有做任何事情
*/
Entity* e1 = new Entity;
Entity* e2 = (Entity*)malloc(sizeof(Entity));
e1->printName();
e.printName();
delete e1; // new 申请空间记得用delete释放
delete[] b;
free(e2); // malloc 申请空间记得用free释放
return 0;
}
标签:name,data,C++,内存,new,pointer,delete
From: https://www.cnblogs.com/orzmiku/p/17644211.html