• 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
    ", 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作为参数的时候报错。

  • 相关阅读:
    程序员开发工作之算法和架构
    iOS开发学习概述及知识整理
    git基本技巧及进阶
    使用命令行工具运行Xcode 7 UI Tests
    技巧集锦2
    Xcode开发小问题集锦
    Xcode 7如何 免费 真机调试iOS应用
    常用shell script 珍藏
    多线程学习7--CountDownLatch
    学习多线程6---栅栏
  • 原文地址:https://www.cnblogs.com/sunnylinry/p/14590818.html
Copyright © 2020-2023  润新知