new和malloc区别(自己口头描述)以及delete用法

1.new/delete是c++使用的关键字,在c语言中不能使用,malloc/free是c语言<stdlib.h>中的库函数,只要引入头文件就行使用

2.new是关键字不需要指定开辟堆区的空间,系统会自动根据对象类型分配空间,malloc是函数,强制写开辟的内存大小。而且malloc函数返回的是void*指针,并不安全,一般都会使用强制类型转换成指定的指针类型,new就只会返回规定的对象类型,所以安全。

3.new内存分配失败会抛出异常,malloc指挥返回NULL

4.new/delete是c++分配的一块内存叫自由存储区,malloc/free是分配的堆区,其实自由存储区也有点堆区的意思,但不等同与堆区。因为new/delete是自由存储区给对象分配的规定类型的一块连续的区域,所以可以在析构和构造函数中做一些调用时的操作,malloc/free只能动态分配内存,不行做相关操作。

delete用法

  • int *a = new int;
    delete a; //释放单个int的空间

  • int *a = new int[5];
    delete [] a; //释放int数组空间

c++11中=delete用法

当我们希望类不需要被拷贝,这是我们就会把构造函数设为private,但是c++11就不用这样做了,

#include <cstdio>
class MyClass
{
public:
    int func(int data)=delete;
};
int main(void)
{
    MyClass obj;
    obj.func(100);
    return 0;
}

在一个类的成员函数后面加一个=delete就会使得这个函数不会在被调用,否则会报错。

调用func时候就会报错。

如果我们希望类不被拷贝可以在拷贝函数后面加=delete

MyClass(const MyClass&) = delete;
MyClass& operator=(const MyClass&) = delete;
=delete巧用
#include <cstdio>

class TestClass
{
public:
    void func(int data) { printf("data: %d\n", data); }
    //void func(double data)=delete;
};
int main(void)
{
    TestClass obj;
    obj.func(100);
    obj.func(100.0);

    return 0;
}

在用100.0调用func时候,如果没有double的方法,100.0自动转成int,但是这是我们不想看到的,所以加上都变了参数方法=delete,使用double作为参数的时候报错。

posted @ 2021-03-29 07:26  爱吃鱼的小女孩  阅读(320)  评论(0编辑  收藏  举报