●学校情報

講座一覧・募集状況

学習方法

学習サポート

修了生の評価

受講生の横顔

当学院について

入学相談

入学手続

 

●講座情報

技術者養成講座

プログラミング講座

WEB講座

情報処理試験講座

Excel講座

Access講座

 

●関連コラム

関連コラム

関連用語集

 

logo

 

 

関連用語集

C++のnew/delete演算子とは?動的メモリ確保の基本をマスターしよう!

C++では、実行時に必要なだけメモリを確保して使うことができます。 このとき使うのが new / delete 演算子です。 動的メモリ管理の基本として、必ず覚えておくべき機能です。

この記事では、new / delete の使い方、配列との違い、注意点などを初心者向けにわかりやすく解説します。

new演算子とは?

new は、ヒープ領域にメモリを確保し、確保したアドレス(ポインタ)を返す演算子です。 書式は以下のとおりです。

int* ptr = new int;  // 整数1つ分のメモリを確保
*ptr = 100;

cout << *ptr << endl;  // → 100

このように new 型名 でメモリを確保し、そのアドレスをポインタに保存します。

delete演算子とは?

deletenew で確保したメモリを解放する演算子です。 ヒープメモリは自動的に解放されないため、必ず 手動で delete を使います。

delete ptr;  // メモリを解放

この解放を忘れると、メモリリークの原因になります。

配列に対するnew/delete

配列を確保する場合は、[] を使い、解放時も delete[] を使う必要があります。

int* arr = new int[5];  // int型の配列を5個分確保

for (int i = 0; i < 5; i++) {
    arr[i] = i + 1;
}

delete[] arr;  // 配列用のdeleteを忘れずに!

deletedelete[] を正しく使い分けましょう。

クラスのnew/delete

クラスも new で生成し、delete で解放できます。 このとき、コンストラクタデストラクタが自動で呼ばれます。

class Person {
public:
    Person() { cout << "生成" << endl; }
    ~Person() { cout << "破棄" << endl; }
};

int main() {
    Person* p = new Person();
    delete p;
}

new/deleteを使うメリット

  1. 実行時に必要なメモリだけ使える
  2. 大きさが決まらない配列や構造体も扱える
  3. クラスの動的生成・管理ができる

注意点

  • delete を忘れるとメモリリークが発生します
  • 配列には必ず delete[] を使う必要があります
  • delete 後のポインタは nullptr にしておくと安全

まとめ

C++の new / delete は、動的メモリを扱うための基本中の基本です。 特にdeleteの使い忘れはバグの原因になるので、確保と解放はセットで覚えましょう。

現代のC++ではスマートポインタ(unique_ptr, shared_ptr)の使用が推奨されますが、まずは new/delete の基本をしっかりマスターすることが大切です。

 

C++関連用語集

−−−−−  C++  −−−−−

C++のクラス(Class)とは?仕組みと使い方をわかりやすく解説!

C++のオブジェクト(Object)とは?クラスとの関係と役割をわかりやすく解説!

C++のコンストラクタ(Constructor)とは?役割と使い方をやさしく解説!

C++のデストラクタ(Destructor)とは?役割と使い方をやさしく解説!

C++の継承(Inheritance)とは?クラスを拡張する基本テクニック

C++の多態性/ポリモーフィズム(Polymorphism)とは?オブジェクト指向の真髄を解説!

C++のオーバーロード(Overload)とは?関数や演算子を便利に使い分けよう!

C++のオーバーライド(Override)とは?継承と仮想関数の正しい使い方

C++の仮想関数(Virtual Function)とは?ポリモーフィズムを実現する仕組みを解説!

C++の純粋仮想関数(Pure Virtual Function)とは?抽象クラスとの関係も解説!

C++の抽象クラス(Abstract Class)とは?使い方と役割をわかりやすく解説!

C++のテンプレート(Template)とは?型に依存しない汎用的な関数・クラスを作ろう!

C++の名前空間(Namespace)とは?名前の衝突を防ぐ便利な機能

C++の標準テンプレートライブラリ(STL)とは?効率的な開発に必須のライブラリ群

C++のベクター(vector)とは?配列より便利なSTLコンテナを使いこなそう!

C++のイテレータ(Iterator)とは?STLコンテナを自在に操作する鍵

C++の参照(Reference)とは?ポインタとの違いもわかりやすく解説!

C++のポインタ(Pointer)とは?メモリを操る強力な機能をやさしく解説!

C++の動的メモリ確保(Dynamic Memory Allocation)とは?newとdeleteを使いこなそう

C++のnew/delete演算子とは?動的メモリ確保の基本をマスターしよう!

C++の例外処理(Exception Handling)とは?try/catch/throwでエラーに強いプログラムを作ろう

C++のtry/catch構文とは?例外処理の基本をやさしく解説!

C++のRAIIとは?リソース管理を自動化する重要な設計原則

C++の静的変数(static variable)とは?使い方・特徴・注意点をやさしく解説!

C++の関数ポインタ(Function Pointer)とは?使い方と活用例をわかりやすく解説!

C++のラムダ式(Lambda Expression)とは?書き方・使い方をやさしく解説!

C++のスマートポインタ(Smart Pointer)とは?自動で安全なメモリ管理を実現しよう!

C++のコンパイル(Compile)とは?仕組みと流れをわかりやすく解説!

C++のリンク(Link)とは?コンパイルとの違いとエラー対策を解説!

C++のプリプロセッサディレクティブとは?#include や #define の意味と使い方