new的作用是在堆上申请内存空间,首先写"new",然后再写申请空间存放的数据类型,申请空间的大小取决于数据的类型,比如申请一个空间存放整型变量,那么堆会分配4byte,然后我们需要知道分配的空间在什么位置,所以返回的是指针类型
#include<iostream> #include<string> class Entity { private: std::string m_Name; public: Entity() { m_Name = "Unknow"; } Entity(const std::string name) :m_Name(name) {} }; int main() { int a; int* b = new int; int* c = new int[20];//200 bytes Entity* e0 = new Entity("Wangtn"); Entity* e1 = new Entity[50]; std::cin.get(); }
new一个类的时候不光申请了这个类大小的内存空间,还调用了他的构造函数,new的本质就是一个操作符,和"+","-","="是一样的,是个运算符就说明我么可以将他过载(overload)
本质上来说,使用new类似于malloc
Entity* e0 = new Entity("Wangtn"); Entity* e0 = (Entity*)malloc(sizeof(Entity));
也就是说这两个是一样的,他们唯一的区别就是new会申请内存,然后调用构造函数,返回地址,而malloc只是申请内存空间返回地址,不调用构造函数。
使用new后一点要delete掉,delete相当于free,还需要注意的是,使用new 数据类型[]来申请一串内存,那么这个申请的一串空间需要用delete[]来删掉
int* b = new int; delete[] b;