C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++のnew演算子で確保したメモリを初期化する方法

C++のnew演算子は、メモリの「割り当て」を行うためのものであり、「初期化」まで自動的に行うものではありません。しかし、int型の配列をnewで動的に確保し、すべての要素をデフォルト値(intの場合は0)で初期化したい場合には、次のような構文を使用できます。

基本構文:デフォルト初期化

new int[10]();

ポイントは、型名の後に空のかっこ () を付けることです。これにより、確保されたすべての要素がデフォルト初期化(ゼロクリア)されます。

なお、この書き方では (0) のように具体的な値を指定したり、他の式を渡したりすることはできません。あくまで「デフォルト値での初期化」専用の構文である点に注意してください。

その他の初期化方法

デフォルト値以外の値で初期化したい場合や、スタック上の配列を初期化したい場合には、標準ライブラリが提供する以下のような関数を利用すると便利です。

  • std::memset:メモリ領域を指定したバイトパターンで埋めます(主に0クリアに使用)。
  • std::fill_n:指定した範囲の要素すべてに任意の値を代入します。

サンプルコード

#include <iostream>
#include <cstring>   // memset
#include <algorithm> // fill_n

int main() {
    // new + () ですべての要素を0で初期化
    int* dynamicArray = new int[10]();

    // スタック上の配列をmemsetで0に初期化
    int arr1[10];
    std::memset(arr1, 0, 10 * sizeof(int));

    // fill_nですべての要素に1を代入
    int arr2[10];
    std::fill_n(arr2, 10, 1);

    // 動的確保したメモリは忘れず解放する
    delete[] dynamicArray;

    return 0;
}

まとめ

  • new int[n]() を使えば、動的確保した配列をまとめてデフォルト値(0)で初期化できる。
  • 空のかっこ以外の値指定は不可。非デフォルト値での初期化には std::fill_nstd::memset などを活用する。
  • new[] で確保したメモリは、必ず delete[] で解放すること。
  1. C++のnew演算子を使って2次元配列を動的に宣言・生成する方法

    動的な2次元配列とは、基本的に「配列へのポインタ」を要素とする配列(ポインタの配列)のことです。つまり、各行が独立した1次元配列としてヒープ上に確保され、それらの先頭アドレスを格納するポインタ配列によって全体が管理されます。下図は、3×4の2次元配列のイメージです。アルゴリズムC++のnew演算子で2次元配列を動的に確保する手順は以下の通りです。Begin 配列の寸法(行数・列数)を宣言する。 new を使って 2次元配列 a[][] を動的に確保する。 配列に要素を代入する。 配列の内容を出力する。 delete でメモリを解放する。 Endサンプルコ

  2. C++で変数を宣言するには?宣言と定義の違いをわかりやすく解説

    C++では「宣言」と「定義」がしばしば混同されます。この2つの違いを正しく理解することは、プログラムの構造を把握するうえで非常に重要です。 宣言とは何か? 宣言とは、プログラム内で使用する変数・ユーザー定義型・関数について、その型やサイズ(関数の場合は引数の型やサイズ)をコンパイラに伝えることを指します。宣言だけでは、メモリ上に領域は一切確保されないという点がポイントです。 宣言の例 extern int a; // 変数aを定義せずに宣言する struct _tagExample { int a; int b; }; // 構造体を宣言する in