c++ new用法全解析

一、動態內存分配

c++ new主要用於動態內存分配,可以在程序運行時根據需要分配內存空間。使用new創建的變量是存儲在堆上,因此不會隨着函數的結束而被清除。

下面是一個簡單的示例代碼:

#include <iostream>
using namespace std;

int main() {
    int* ptr = new int;
    *ptr = 10;
    cout << "Value of ptr: " << *ptr << endl;
    delete ptr;
    return 0;
}

上述代碼中,使用new創建了一個名為ptr的指針,然後把值10存儲在指針所指向的地址中。最後使用delete釋放內存。

二、數組的動態內存分配

c++ new同樣可以用於數組的動態內存分配。使用new創建的數組同樣是存儲在堆上,因此不會隨着函數的結束而被清除。

下面是一個簡單的示例代碼:

#include <iostream>
using namespace std;

int main() {
    int n = 5;
    int* arr = new int[n];
    for(int i=0; i<n; i++) {
        arr[i] = i+1;
        cout << arr[i] << " ";
    }
    delete[] arr;
    return 0;
}

上述代碼中,使用new創建了一個大小為5的數組,然後在for循環中給每個元素賦值並輸出。最後使用delete[]釋放內存。

三、類的動態內存分配

c++ new還可以用於類的動態內存分配。使用new創建的類對象同樣是存儲在堆上,因此不會隨着函數的結束而被清除。

下面是一個簡單的示例代碼:

#include <iostream>
using namespace std;

class Person {
public:
    string name;
    int age;
    void introduce() {
        cout << "My name is " << name << ", I'm " << age << " years old." <name = "Tom";
    ptr->age = 25;
    ptr->introduce();
    delete ptr;
    return 0;
}

上述代碼中,使用new創建了一個名為ptr的Person指針,然後給屬性賦值並調用introduce函數。最後使用delete釋放內存。

四、new傳入參數

c++ new除了可以不帶參數創建變量、數組、對象外,還可以傳入參數,用於給新創建的變量、數組、對象進行初始化。

下面是一個簡單的示例代碼:

#include <iostream>
using namespace std;

int main() {
    // 創建大小為5的int數組,並初始化為0
    int* ptr1 = new int[5]();
    for(int i=0; i<5; i++) {
        cout << ptr1[i] << " ";
    }
    delete[] ptr1;

    // 創建double類型變量,並初始化為3.14
    double* ptr2 = new double(3.14);
    cout << *ptr2 << endl;
    delete ptr2;

    return 0;
}

上述代碼中,使用new創建了一個大小為5的int數組,並初始化為0;創建一個double類型變量,並初始化為3.14。最後使用delete或delete[]釋放內存。

五、自定義new和delete

c++中可以自定義new和delete,來實現動態內存分配的不同需求。例如,可以通過重載類的new和delete函數,實現自己的內存池,提升內存分配效率。

下面是一個簡單的示例代碼:

#include <iostream>
using namespace std;

void* operator new(size_t size) {
    cout << "Allocating memory with size " << size << endl;
    void* ptr = malloc(size);
    return ptr;
}

void operator delete(void* ptr) {
    cout << "Freeing allocated memory" << endl;
    free(ptr);
}

int main() {
    int* ptr = new int;
    *ptr = 10;
    cout << "Value of ptr: " << *ptr << endl;
    delete ptr;
    return 0;
}

上述代碼中,使用了自定義的new和delete函數,用於輸出分配內存的大小和釋放內存的信息。

總結

本文詳細介紹了c++ new的用法,包括動態內存分配、數組的動態內存分配、類的動態內存分配、new傳入參數、自定義new和delete。希望本文能夠對使用c++進行編程的開發工程師有所幫助。

原創文章,作者:IRQZG,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/333128.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
IRQZG的頭像IRQZG
上一篇 2025-01-27 13:34
下一篇 2025-01-27 13:34

相關推薦

  • Python中new和init的區別

    new和init都是Python中常用的魔法方法,它們分別負責對象的創建和初始化,本文將從多個角度詳細闡述它們的區別。 一、創建對象 new方法是用來創建一個對象的,它是一個類級別…

    編程 2025-04-29
  • JavaScript中使用new Date轉換為YYYYMMDD格式

    在JavaScript中,我們通常會使用Date對象來表示日期和時間。當我們需要在網站上顯示日期時,很多情況下需要將Date對象轉換成YYYYMMDD格式的字符串。下面我們來詳細了…

    編程 2025-04-27
  • 如何使用return new crontrigger(cron).nextexecutiontime(triggercontext)實現定時調度

    如果你正在尋找一種可靠且簡單的方式來實現定時調度,那麼你可能需要了解return new crontrigger(cron).nextexecutiontime(triggerco…

    編程 2025-04-27
  • 深入剖析c++中new的用法

    一、c++中new關鍵字的概述 new關鍵字是c++中用來動態地分配內存空間的操作符。使用new運算符可以在程序運行時從堆(heap)中分配內存空間,而delete運算符則可以釋放…

    編程 2025-03-12
  • new Date().getTime()詳解

    在學習JavaScript基礎和開發過程中,我們經常會用到時間處理的相關功能,其中一個重要的方法就是new Date().getTime()。new Date()是一種常用的時間對…

    編程 2025-02-25
  • JavaScript中的new Map()

    一、Map Map是JavaScript中的一種可迭代的鍵值對容器,其中每個鍵和值可以是任何類型。在ES6中被提出,它可以用來存儲和操作鍵值對數據。 const myMap = n…

    編程 2025-02-05
  • 深入了解new RegExp

    一、RegExp是什麼 RegExp(正則表達式)是JavaScript中處理字符串的強大工具,可以使用它來做驗證、替換和提取等操作。在JavaScript中,RegExp是一個內…

    編程 2025-01-27
  • new與malloc的區別和使用

    一、new和malloc的基本概念 new和malloc都是用於動態分配內存的函數。dynamic memory allocation是指在程序運行時動態分配內存,也稱堆分配(he…

    編程 2025-01-27
  • New和Malloc的區別

    一、New和Malloc的作用 New和Malloc都是動態內存分配的函數,可以在程序運行時為變量動態分配內存。 New是C++的標準運算符,它為對象動態分配內存,並調用構造函數初…

    編程 2025-01-27
  • c++ new二維數組的使用

    一、創建和初始化二維數組 在c++中,我們可以使用new來創建二維數組,將其聲明為指向指針的指針,如下所示: int **arr = new int*[rows]; //創建一個指…

    編程 2025-01-21

發表回復

登錄後才能評論