c++中的new

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;

 

posted @ 2020-04-24 19:17  Wangtn  阅读(609)  评论(0编辑  收藏  举报