亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

new運算符

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

1.分配基礎(chǔ)類型內(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ù)組進(jìn)行動態(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)用對象關(guān)聯(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ù)組中元素對應(yīng)的析構(gòu)函數(shù)
    delete[] a;
}

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

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

相關(guān)文章

  • C語言超市管理系統(tǒng)設(shè)計

    C語言超市管理系統(tǒng)設(shè)計

    這篇文章主要為大家詳細(xì)介紹了C語言超市管理系統(tǒng)設(shè)計,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • C語言全方位講解數(shù)組的使用

    C語言全方位講解數(shù)組的使用

    數(shù)組是一組有序的數(shù)據(jù)的集合,數(shù)組中元素類型相同,由數(shù)組名和下標(biāo)唯一地確定,數(shù)組中數(shù)據(jù)不僅數(shù)據(jù)類型相同,而且在計算機(jī)內(nèi)存里連續(xù)存放,地址編號最低的存儲單元存放數(shù)組的起始元素,地址編號最高的存儲單元存放數(shù)組的最后一個元素
    2022-04-04
  • C++?std::thread?使用方法

    C++?std::thread?使用方法

    這篇文章主要介紹了C++?std::thread?如何使用,C++中的std::thread類提供了一種方便的多線程編程方式,在使用std::thread類時,我們需要注意線程間的同步和通信問題,以確保多個線程之間的正確協(xié)同工作需要的朋友可以參考下
    2023-03-03
  • 最新評論