zoukankan      html  css  js  c++  java
  • C++学习笔记:New和Delete

    C语言操作内存的方式

     下面是一段典型的内存分配方式:
     
        MyType *pType = (MyType *)malloc(sizeof(MyType));
        if (pType == NULL) error;
        Initialize(&MyType);
     
    在以上的处理中,涉及到了四个环节:
    1. 使用sizeof指定内存大小;
    2. malloc返回的值是void* 类型,需要进行类型转换;
    3. 需要检查是否分配成功;
    4. 需要对分配的内存进行初始化;
     

    C++ 的处理方式

    C语言内存分配时需要注意的东西太多,容易出错。C++在可用性、安全性方面进行了改进。C++使用 new/delete 进行内存的分配、释放。典型的应用方式如下:
     
        MyType *pType = new MyType
     
    从形式上看,比C语言简介了不少。

    New操作完成两件事:1) 根据类型信息分配内存;2) 调用类的constructor函数完成初始化。
    C++ 中不需要显式的指示内存的大小,也不需要显式的执行初始化操作。这方便了代码的编写,也减小了出错的可能性。
     

    使用new/delete的注意事项

    1) 避免对void* 类型指针执行delete操作。由于void* 没有类型信息,执行delete操作时只能释放内存,不会调用deconstructor函数。


    2)数组的操作:
    MyType *pType = new MyType[100];
    Delete []pType;
    如果使用 "delete ptype"也可以正确释放内存,但是只会调用数组中第0个成员的deconstructor。

    3) new/delete 可以重载,可以定义在global范围,或class中;


    4) 参数的传入: new(23) int;


    5) placement new的使用,可以通过将内存的地址传入在制定的内存上创建对象;例如:
    void *p = malloc(sizeof(CA));
    CA *pA = new(p) CA(initVal); // the object is constructed  memory pointed by p, initVal is constructor argument
    pA->~CA(); // notice: only object is destroyed, memory is kept;
    free(p);

    6) Delete可以删除0;


    7) 类的内存管理成员函数隐含是静态的;

  • 相关阅读:
    web api 设置允许跨域,并设置预检请求时间
    T4模板
    DDD模式
    Vue watch用法
    第三章--第五节:集合
    简单的Python API爬虫与数据分析教程--目录
    第三章--第四节:字典
    第三章--第三节(补充):列表排序
    汇总张小龙在知乎上的问答
    第三章--第三节:列表
  • 原文地址:https://www.cnblogs.com/weichsel/p/1826296.html
Copyright © 2011-2022 走看看