12章 newとdelete

http://www.geocities.jp/ky_webid/cpp/language/012.html

C++ではmallocの変わりにnewとdelete演算子を使います。

簡単に言えばnewがmallocでfreeがdeleteみたいなもんです。

#include <iostream>

int main () {
    int *p;
    p = new int();
    *p = 123;
    
    std::cout << *p << std::endl;
    
    delete p;
    
    return 0;
}

new int()と書くことでmalloc(sizeof(int))と書くのとほぼ同義です。

また、freeの代わりにdeleteと書くようにします。

わざわざsizeofしなくてもいいので便利ですね。またコンストラクタやデストラクタが呼ばれるのも良いですね。

また配列のメモリ確保もnew演算子で出来ます。その場合はdelete演算子の使い方がちょっと変わります。

#include <iostream>

int main () {
    int *p;
    int i;
    
    p = new int[10];
    for (i=0;i<10;i++) {
        p[i] = i;
        std::cout << p[i] << std::endl;
    }
    
    delete [] p;
    
    return 0;
}
$ main
0
1
2
3
4
5
6
7
8
9

配列の場合はこのが必要となります。

ちなみにがなくてもコンパイルは通るのでプログラマが気をつけて作業しないとミスする可能性大なので注意が必要です。