最近在寫資料結構的時候, 被困擾與 C++operator newnew

其實在《C++ Primer》中有對於 operator new 的介紹, 但是僅限於其多載. 也就是說 operator new 本質上是一個函式, 只不過形式和普通的函式或者成員函式不太一樣

對於 operator new 分配的記憶體來說, 需要使用 operator delete 來回收, 這裡有一個和 new 不同的是, 如果 operator new 配置的記憶體是一個陣列的話, 使用 operator delete 進行回收的時候, 只需要放入指向陣列的第一個指標即可, 也就是 operator new 就像 C 的程式庫函式 mallocfree 一樣. 而實際上, operator newoperator delete 低層也確實是使用 mallocfree 實現的

遇到這個問題是因為, 我把 operator delete 當成了 delete. 原本以為也要像 delete 一樣一個一個進行釋放, 但是沒想到是一次性全部回收掉的. 後來轉念一想, operator delete 低層不就是使用 free 嗎? 於是問題得以解決

《C++ Primer》中只是提到了 operator newoperator delete 的多載, 對於這一點並沒有提及, 所以當時對我造成了困擾

 

範例 :

#include <iostream>


using namespace std;


int main(int argc, char *argv[]) {

    auto p {reinterpret_cast<int *>(::operator new (sizeof(int) * 10))};

    for(auto i {0}; i < 10; ++i) {

        p[i] = i;

    }

    for(auto i {0}; i < 10; ++i) {

        cout << p[i] << "\t";

    }

    cout << endl;

    ::operator delete (p);

}