トップC++入門 > メモリの動的管理(new / delete)
メモリの動的管理(new / delete)

1.メモリの動的管理(new / delete)

C言語の場合、メモリの確保・解放は malloc(あるいはcalloc)/free 関数を使う。 C++ でも malloc(あるいはcalloc)/free 関数を使うことができるが、一般には new / delete を使う。

文献[1]のプログラム例を示すと、次のようになる。

C#、Java、JavaScript などでも new 演算子によってメモリを動的に確保する。 これらの言語では獲得したメモリの解放は自動的に行われる。 しかし、C++の場合、確保したメモリが使用済みとなったとき、delete演算子を使って解放しなければいけない。

複数の言語を同時並行的に使っている場合、多くの言語ではメモリ解放は自動的に行われるのに対して、 C++ ではプログラマが明示的に解放しなければならない。うっかり忘れないように注意しなければならない。

#include <iostream>
using namespace std;

int main() {
  int *p1 = new int;         // int 型変数1個のメモリ確保
  int *p2 = new int[256];    // int 型の配列 (要素数 256) のメモリ確保

  *p1 = 1000;
  cout << "p1 が指している整数型は: " << *p1 << "\n";

  // p2 の利用: 省略

  delete p1;    // メモリの解放
  delete[] p2;  // メモリの解放 (1要素と配列とで異なる!!)

  return 0;
}

A.リファレンス

[1] new/delete によるメモリの動的管理