• NEW


    new对象一般用法

    int *pi = new int;

    int *pi=new int(1024);

    string *ps=new string(10,'9');

    vector<int> *pv=new vector<int>{0,1,2,3,4,5,6,7,8,9}; // 列表初始化

    区别:

    (1)string *ps1=new string; // 默认初始化

    (2)string *ps=new string();  // 值初始化为空

    对于内置类型或组合类型的对象,默认初始化对象的值时未定义;而对于类类型的对象,均调用默认构造函数来初始化;

    一般:指针与动态分配内存与释放

    明确地分配内存,就可以在堆上放置任何内容;

    任何情况下,都不应该使用未初始化的指针;应声明指针的同时初始化指针;;如果不想立即分配内存,可以把他们初始化为空指针nullptr;

    int * myIntegerPointer; 

    int* myIntegerPointer =nullptr

    myIntegerPointer=new int; 

    在解除引用之前,指针必须有效;对null或未初始化的指针解除引用,会引起程崩溃;

    *myIntegerPointer=8;

    在使用完动态分配的内存后,需要用delete释放内存;

    为防止在释放指针指向的内存后再使用指针,可以将指针指向nullptr;

    delete myIntegerPointer;

    myIntegerPointer=nullptr;

    delete const对象

    const 对象的值虽然不能被改变,但是本身是可以被销毁的;

    const int *pci=new const int(1024);

    delete pci;

    动态分配的数组

    int arraySize=8;

    int* myVariablesizedArray= new int[arraySize];

    myVariablesizeArray[3]=2;

    delete[]  myvariablesizedArray;

    智能指针:unique_ptr、shared_ptr、weak_ptr

    unique_ptr:

    智能指针在对象超出作用域会被删除时,会自动释放内存或资源;例如函数执行完毕后,会自动释放内存;

    unique_ptr是一个通用的智能指针,他可以指向任意类型的内存。

    它是一个模板;

    模板需要用尖括号指定模板参数,指定unique_ptr要指向的内存类型;

    Employee* anEmployee= new Employee;

    auto anEmployee= std::make_unique<Employee>();

    c++14以前:std::make_unique<Employee> anEmployee(new Employee);

    可以像普通指针那样使用anEmployee指针;

    shared_ptr:允许数据的分布式“所有权”;

    有一个引用计数,指定“拥有者”个数,没超出作用域一次,就递减引用计数;计数为0时,释放指针引用的对象;

    不能存储数组;

    std::make_shared<>()创建shared_ptr;

    weak_ptr:可以观察shared_ptr,而不会递减或递增所链接shared_ptr的引用计数;

    类中动态分配的指针与释放:

    1、构造函数中,动态分配二维数组

    SpreadsheetCell**  mCells;

    Spreadsheet::Spreadsheet(int inWidth, int inHeight): mWidth(inWidth), mHeight(inHeight)

    {

    mCells =new SpreadsheetCell* [mWidth];

    for (int i=0; i<mWidth; i++){
    mCells[i] =new SpreadsheetCell[mHeight];

         }

    }

    2、在析构函数中释放在构造函数中分配的内存

    Spreadsheet::~Spreadsheet()

    {

    for(int i=0; i<mWidth;i++){

    delete [] mCells[i];

       }

    delete [] mCells;

    mCells=nullptr;

    }

  • 相关阅读:
    【算法习题】青蛙跳台阶
    【转】从PowerDesigner概念设计模型(CDM)中的3种实体关系说起
    redis常用链接
    读书笔记——《redis入门指南(第2版)》第四章 进阶——4.1-5
    查询linux计算机的出口ip
    读书笔记——《redis入门指南(第2版)》第三章 入门
    vmware中的linux虚拟机配置以nat模式上网,并用xshell连接该虚拟机
    每日代码系列(1)
    第一次尝试自己编写
    原型模式
  • 原文地址:https://www.cnblogs.com/wllwqdeai/p/10069716.html
Copyright © 2020-2023  润新知