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

淺析C++中的動態(tài)內(nèi)存分配

 更新時間:2024年03月10日 08:27:42   作者:夢_魚  
這篇文章主要為大家詳細介紹了C++中動態(tài)內(nèi)存分配的相關知識,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下

程序在運行過程對內(nèi)存進行分配申請與釋放

new運算符

運行時存儲分配,返回可以存放對應類型數(shù)據(jù)的內(nèi)存地址,指向分配的內(nèi)存空間

1.分配基礎類型內(nèi)存存儲空間

#include <iostream>

using namespace std;

int main() {
    string *name;
    // 動態(tài)在堆空間分配存儲空間,字符串值 北門吹雪 值存儲到分配的內(nèi)存空間
    name = new string("北門吹雪");

    cout << *name << endl;
    delete name;
}

2.動態(tài)分配一維數(shù)組空間

很多函數(shù)使用一維或二維數(shù)組,這些數(shù)組是在編譯時大小未知的,數(shù)組容量的大小隨著函數(shù)調(diào)用動態(tài)變大或者變小

#include <iostream>

using namespace std;

void alloc_one_dimensional(int len) {
    int *nums;
    // 內(nèi)存分配可能會失敗,通過try捕獲程序中的異常
    try {
        // new對數(shù)組分配內(nèi)存,返回數(shù)組中第一個元素的指針
        nums = new int[len];
    } catch (bad_alloc& e) {
        cout << "內(nèi)存分配失敗" << endl;
    }
    cout << "動態(tài)分配內(nèi)存大小:" << len  << endl;
    // 是否動態(tài)分配的內(nèi)存
    delete[] nums;
}

int main() {
    alloc_one_dimensional(10);
    alloc_one_dimensional(12);
    alloc_one_dimensional(13);
}

3.動態(tài)分配二維數(shù)組

如果形參是一個二維數(shù)組,必須指定第一維度的大小,a[][10] 合法,但是 a[][]非法,編譯時就確定數(shù)組的長度,但很多場景下需要每個長度不一的二維數(shù)組

因為使用new對數(shù)組進行動態(tài)分配,返回數(shù)組中第一個元素的地址,所有創(chuàng)建二維數(shù)組則第二維度只保留指針

#include <iostream>

using namespace std;

template<class T>
void alloc_two_dimensional(T _, int number_of_rows, int number_of_columns) {
    // 先動態(tài)創(chuàng)建保存數(shù)組元素的指針
    int **matrix = new T *[number_of_rows];

    // 然后再依次創(chuàng)建一維數(shù)組
    for (int row = 0; row < number_of_rows; row++) {
        matrix[row] = new T[number_of_columns];
    }

    // 修改二維數(shù)組的值
    matrix[1][1] = 10;
    matrix[2][2] = 10;
    matrix[3][3] = 10;
    matrix[4][4] = 10;

    // 遍歷二維數(shù)組
    for (int i = 0; i < number_of_rows; i++) {
        for (int j = 0; j < number_of_columns; j++) {
            cout << matrix[i][j] << "\t";
        }
        cout << endl;
    }

    // 釋放內(nèi)存
    // 首先釋放保存在數(shù)組中的每一個元素指向的數(shù)組
    for (int i=0; i < number_of_rows; i++) {
        delete[] matrix[i];
    }
    
    // 釋放最外層的數(shù)組
    delete[] matrix;
}

int main() {
    int a;
    alloc_two_dimensional(a, 9, 12);
}

delete 操作符

釋放由new操作符動態(tài)分配的內(nèi)存空間,調(diào)用對象關聯(lián)類型的析構(gòu)函數(shù)

  • 只能操作指針類型對象
  • 單個對象使用delete運算符,但多個對象的數(shù)組則需要使用delete[]運算符
#include <iostream>

int main() {
    int* y = new int(10);
    // 釋放指針指向的單個對象的內(nèi)存,調(diào)用對象的析構(gòu)函數(shù)
    delete y;
	
    int *a = new int[10]{1, 2, 3, 4};
    // 釋放指針指向的數(shù)組對象所有內(nèi)存,遍歷依次調(diào)用數(shù)組中元素對應的析構(gòu)函數(shù)
    delete[] a;
}

使用場景:動態(tài)分配的內(nèi)存空間(存儲空間)不在需要時

到此這篇關于淺析C++中的動態(tài)內(nèi)存分配的文章就介紹到這了,更多相關C++動態(tài)內(nèi)存分配內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • C++用mysql自帶的頭文件連接數(shù)據(jù)庫

    C++用mysql自帶的頭文件連接數(shù)據(jù)庫

    現(xiàn)在正做一個接口,通過不同的連接字符串操作不同的數(shù)據(jù)庫。要用到mysql數(shù)據(jù)庫。通過網(wǎng)上的一些資料和自己的摸索,大致清楚了C++連接mysql的方法??梢酝ㄟ^2種方法實現(xiàn)。第一種方法是利用ADO連接,第二種方法是利用mysql自己的api函數(shù)進行連接。今天主要來講解下使用API
    2016-07-07
  • C++引用和強制類型轉(zhuǎn)換問題小結(jié)

    C++引用和強制類型轉(zhuǎn)換問題小結(jié)

    本文給大家介紹C++引用和強制類型轉(zhuǎn)換問題,本文結(jié)合實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2025-10-10
  • C++?Qt開發(fā)之使用QUdpSocket實現(xiàn)UDP網(wǎng)絡通信

    C++?Qt開發(fā)之使用QUdpSocket實現(xiàn)UDP網(wǎng)絡通信

    Qt 是一個跨平臺C++圖形界面開發(fā)庫,利用Qt可以快速開發(fā)跨平臺窗體應用程序,本文主要介紹如何運用QUdpSocket組件實現(xiàn)基于UDP的網(wǎng)絡通信功能,需要的可以參考下
    2024-03-03
  • Qt使用隨機驗證碼的實現(xiàn)示例

    Qt使用隨機驗證碼的實現(xiàn)示例

    有時候在登錄界面需要驗證碼功能,這樣能夠防止被惡意程序攻擊,本文主要介紹了Qt使用隨機驗證碼的實現(xiàn)示例,具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • C++中Boost.Chrono時間庫的使用方法

    C++中Boost.Chrono時間庫的使用方法

    chrono是一個time library, 源于boost,現(xiàn)在已經(jīng)是C++11標準了,下面這篇文章主要給大家介紹了關于C++中Boost.Chrono時間庫的使用方法,文中通過示例代碼介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2017-09-09
  • C語言控制語句之 循環(huán)

    C語言控制語句之 循環(huán)

    C語言循環(huán)控制語句是一個基于C語言的編程語句,該語句主要有while循環(huán)語句、do-while循環(huán)語句和for循環(huán)語句來實現(xiàn)循環(huán)結(jié)構(gòu),今天通過本文給大家分享C控制語句的相關知識,需要的朋友參考下吧
    2021-07-07
  • 聊一聊C++虛函數(shù)表的問題

    聊一聊C++虛函數(shù)表的問題

    C++是面向?qū)ο蟮恼Z言(與C語言主要區(qū)別),所以C++也擁有多態(tài)的特性。下面通過代碼看下C++虛函數(shù)表的問題,感興趣的朋友一起看看吧
    2021-10-10
  • 淺析c++ 中const關鍵字

    淺析c++ 中const關鍵字

    const是一個C++語言的限定符,它限定一個變量不允許被改變。使用const在一定程度上可以提高程序的安全性和可靠性。下面通過本文給大家分享c++ const關鍵字的相關知識,一起看看吧
    2017-06-06
  • C++異常處理的方式總結(jié)

    C++異常處理的方式總結(jié)

    C++有一套獨立的異常處理機制,相信大家一定聽說過try,catch這兩
    個詞,今天就來做詳細的介紹,文中通過代碼示例給大家介紹的非常詳細,具有一定參考價值,需要的朋友可以參考下
    2023-12-12
  • c++ 智能指針基礎詳解

    c++ 智能指針基礎詳解

    這篇文章主要介紹了c++ 智能指針基礎的相關資料,幫助大家更好的理解和學習使用c++,感興趣的朋友可以了解下
    2021-02-02

最新評論

灌南县| 和田市| 清丰县| 县级市| 霍山县| 宁夏| 香格里拉县| 鸡西市| 达拉特旗| 化隆| 桐庐县| 衡东县| 岐山县| 昆山市| 左云县| 邳州市| 巴中市| 阿克| 瑞昌市| 西畴县| 永年县| 车险| 修水县| 昆山市| 宁晋县| 历史| 平阴县| 隆林| 西藏| 凯里市| 皮山县| 樟树市| 武城县| 宁城县| 措美县| 施秉县| 渝北区| 印江| 大英县| 盱眙县| 炉霍县|