最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

?C++?new?和?delete?關鍵字詳解

 更新時間:2022年06月30日 09:58:16   作者:??zidea????  
這篇文章主要介紹了?C++?new?和?delete?關鍵字詳解,文章圍繞主題展開new?和?delete?的使用方法的介紹,具有一定的參考價值,需要的小伙伴可以參考一下

前言

最早接觸到new這個關鍵字,是在 Java 中,然后 ES6 之后的 js 中也提供了 new 這個關鍵字,在 java 和 js 這兩門語言中,使用 new 關鍵詞可以實例化類的對象。語義是相似的,但是其背后還是有些差異的,js 的 new 和 class 可能是一些語法糖。

那么有了這些對 new 這個關鍵字用法的了解,我們今天來看一看 c++ 中提供 new 這個關鍵字的用途和用法。

我們都知道 c++ 一門效率和性能為先的語言,選擇 c++ 來開發(fā)應用多數(shù)考慮性能才選擇這門語言來開發(fā)應用程序。 C++允許我們在運行時為一個變量或一個數(shù)組分配內存。這就是的動態(tài)內存分配。在 java 和 js 這樣語言中,編譯器都是內存分配和回收機制,開發(fā)人員不用為內存管理而花費時間和精力。但是在 c++ 這門語言這大不一樣,一切都是程序員自己思考,如何分配內存以及在適當時機將其回收。

那么今天要聊的newdelete操作符就是用來動態(tài)地分配和回收內存。

new 和 delete 的使用

new

int* ptr;
ptr = new int;
*ptr = 2;
cout << *ptr << endl;

這里new動態(tài)地獲取一塊大小為 int 類型大小的內存,然后將指向這塊內存地址指針返回給ptr這個我們之前定義好的用于存放int類型大小的指針。

delete

隨后我們用delete來釋放指針ptr指向的內存。

delete ptr;

接下來我們通過 3 個小例子,分別介紹如何使用 new 和 delete 為基本類型、組數(shù)和對象來動態(tài)分配內存以及回收內存

float* pointFloat;
pointFloat = new float;
*pointFloat = 2.0f;
cout << *pointFloat << endl;

為數(shù)組分配內存和釋放內存

int main()
{
    int num= 5;
    int* intPointer;
    intPointer = new int[num];
    for (int i = 0; i < num; ++i) {
        cout << "level of tut: " << i + 1 << ": ";
        cin >> *(intPointer + i);
    }
    for (int i = 0; i < num; ++i) {
        cout << "level of tut" << i + 1 << ": " << *(intPointer + i) << endl;
      }
    delete[] intPointer;
    cout<<"Hello World";
    return 0;
}

使用new為 float 數(shù)組動態(tài)地分配了內存,返回指針是指向內存第一個元素的地址。

class Tut
{
private:
    int level_;
public:
    Tut(int level):level_(level){}
    
    void printLevel(){
        cout << "level: " << level_ << endl;
    }
};
int main()
{
    Tut* ptr = new Tut(2);
    ptr->printLevel();
    delete ptr;
    cout<<"Hello World";
    return 0;
}

注意箭頭運算符->,當通過指針訪問類成員函數(shù)時候會用到->

那么new主要做了什么事情,尋找合適大小內存,然后將指向內存地址的指針返回給你,注意這時new不僅負責分配了Tut大小的內存,同時還調用了Tut的構造函數(shù)。

void* operator new(size_t size)
void operator delete(void*);

malloc 和 new

有時候我們通??梢杂?code>malloc來分配內存,不過使用malloc與使用new有一定區(qū)別

class Base
{
    int val_;
public:
    Base() = default;
    Base(int val):val_(val){}
    
    void print(){
        cout << val_ << endl;
    }
};

可以使用 malloc分配sizeof(Base)Base 類大小內存空間,那么new操作符和malloc其實通常都做了找到一塊可以存放 Base 類型數(shù)據(jù)大小內存,然后將內存地址返回,不同之處,new除了作為分配內存的工作之外,還調用了一下夠著函數(shù)。

Base* base = new Base();
Base* base = (Base*)malloc(sizeof(Base));
Base* base = new Base(1);
base->print();

delete 和 delete[]

使用關鍵字 new 在堆上開辟一塊內存用于存放 Base 類型大小的數(shù)據(jù),因為 c++ 沒有像 Java 那樣的垃圾回收機制,所以需要手動將這塊內存釋放。

delete base;

這里值得提一下,就是deletedelete[]是 2 個不同的操作符,所以我們釋放數(shù)組時候需要選擇delete[]而不是delete。

int* arr_ptr = new int[20];
delete[] arr_ptr;

到此這篇關于 C++ new 和 delete 關鍵字詳解的文章就介紹到這了,更多相關 C++ new 和 delete 內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • C++之類和對象課后習題簡單實例

    C++之類和對象課后習題簡單實例

    下面小編就為大家?guī)硪黄狢++之類和對象課后習題簡單實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-07-07
  • C語言指針原來也可以這樣了解

    C語言指針原來也可以這樣了解

    這篇文章非常詳細的講解了C語言中指針的概念,包含多種方法,多種定義,全面的說明了C語言的特性,希望能給你帶來幫助
    2021-08-08
  • C語言中十六進制轉十進制兩種實現(xiàn)方法

    C語言中十六進制轉十進制兩種實現(xiàn)方法

    這篇文章主要介紹了C語言中十六進制轉十進制兩種實現(xiàn)方法的相關資料,需要的朋友可以參考下
    2017-01-01
  • C語言函數(shù)指針的老生常談

    C語言函數(shù)指針的老生常談

    這篇文章主要為大家介紹了vue組件通信的幾種方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-11-11
  • C語言應用領域分析

    C語言應用領域分析

    在本篇文章里小編給各位分享的是關于C語言應用領域分析內容,有興趣的朋友們可以學習下。
    2020-03-03
  • 基于Matlab實現(xiàn)中國象棋的示例代碼

    基于Matlab實現(xiàn)中國象棋的示例代碼

    中國象棋是起源于中國的一種棋,屬于二人對抗性游戲的一種,在中國有著悠久的歷史。由于用具簡單,趣味性強,成為流行極為廣泛的棋藝活動。本文將利用Matlab實現(xiàn)這一游戲,需要的可以參考一下
    2022-02-02
  • C++初階教程之類和對象

    C++初階教程之類和對象

    C++是面向對象編程的,這也是C++與C語言的最大區(qū)別,而類和對象就是C++面向對象的基礎,下面這篇文章主要給大家介紹了關于C++初階教程之類和對象的相關資料,需要的朋友可以參考下
    2022-02-02
  • c++ minicsv庫的編譯錯誤與解決方案

    c++ minicsv庫的編譯錯誤與解決方案

    有一個項目需要寫csv文件以呈現(xiàn)數(shù)據(jù)。Github上有一個關于csv的輕量級讀寫庫minicsv,于是下載之。但是編譯example時出現(xiàn)了以下問題
    2016-11-11
  • 利用C++如何覆蓋或刪除指定位置的文件內容

    利用C++如何覆蓋或刪除指定位置的文件內容

    這篇文章主要給大家介紹了關于利用C++如何覆蓋或刪除指定位置的文件內容,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面跟著小編來一起學習學習吧。
    2017-08-08
  • 詳解C++編程中的虛函數(shù)

    詳解C++編程中的虛函數(shù)

    這篇文章主要介紹了詳解C++編程中的虛函數(shù),包括在什么情況下應當聲明虛函數(shù)的相關講解,需要的朋友可以參考下
    2015-09-09

最新評論

勃利县| 通辽市| 嘉黎县| 平安县| 凌海市| 汤阴县| 图木舒克市| 资兴市| 青铜峡市| 钦州市| 英吉沙县| 泰和县| 石棉县| 封开县| 聂荣县| 新丰县| 敦煌市| 海丰县| 乌苏市| 日土县| 呼伦贝尔市| 双牌县| 淮北市| 永安市| 绥滨县| 建水县| 万荣县| 合阳县| 濉溪县| 普安县| 内乡县| 滦南县| 图木舒克市| 陕西省| 江永县| 镶黄旗| 莱阳市| 保亭| 顺昌县| 隆安县| 海晏县|