Skip to content

Latest commit

 

History

History
50 lines (39 loc) · 1.86 KB

039-new关键字.md

File metadata and controls

50 lines (39 loc) · 1.86 KB

039-new关键字

事实上,你在编写C++程序时,你应该关系内存性能和优化等问题,如果你不关心这些,你为什么要用C++呢,有很多其他的语言你可以用,都2022年了,你为什么要写C++,除非你特别需要性能或者你要掌控一切。那你就要知道,new关键字是非常重要的。

new的作用就是在堆上分配内存

new就是找到一个足够大的内存块 以满足我们的需求 然后把指向那块内存的指针给我们

下面是一些关于new的使用方法与细节

int main() {
    //在堆上创建一个int
    int *a = new int;
    //在堆上创建一个int数组,有4*50=200个字节
    int *arr = new int[50];
    //在堆上创建一个Person对象
    //这里的new不仅分配内存,还会调用构造方法
    Person *p = new Person("Name");
    //实际上new分配内存调用的c的函数,像下面这样,但是我们在C++中不要这样写
    Person *p1 = (Person *) (malloc(sizeof(Person)));
    //上面两行代码的作用只是一个调用了构造函数,另一个没有调用
    //既然使用了new,我们务必要调用delete~
    delete p;
    delete a;
    //其实delete所作的就是调用c函数里面的free,像下面这样
    free(p1);
    //如果要delete使用了[]的new创建的内容,请使用delete[]来删除,像下面这样
    delete[] arr;
    return 0;
}

另外还有placement new ,就是要决定前面的内存来自哪里,像下面这样

int main() {
    int *arr = new int[50];
    //这样实际上没有分配内存,只是调用了构造方法,在特定的位置初始化了Person
    Person *person = new(arr) Person();
    return 0;
}

这里只是知道一下这个语法,后面再做详细讨论


https://www.bilibili.com/video/BV1DK411M7zx