【C++】new演算子を使ってポインタを初期化する

この記事では、C++のnew演算子を使ってポインタを初期化する方法や、値を参照・書き換えする方法、そしてポインタのメモリを解放する方法について解説します。

初心者の方でもわかりやすく、具体的なサンプルコードと実行結果の例を交えて解説します。

目次から探す

new演算子を使ったポインタの初期化方法

new演算子は、C++において動的なメモリの確保を行うために使用されます。

ポインタを初期化する際にもnew演算子を使用することができます。

初期化

ポインタを初期化するためには、new演算子を使用してメモリを確保し、そのアドレスをポインタに代入します。

以下は、int型のポインタを初期化する例です。

int* ptr = new int;

このコードでは、int型のメモリ領域を確保し、そのアドレスをptrというポインタに代入しています。

値を参照する方法

ポインタを使用すると、そのポインタが指し示すメモリ領域の値を参照することができます。

以下は、ポインタが指し示す値を参照する例です。

int* ptr = new int;
*ptr = 10;
std::cout << *ptr << std::endl;

このコードでは、ポインタptrが指し示すメモリ領域に10という値を代入し、その値を参照しています。

結果として、コンソールには 10 と表示されます。

値を書き換える方法

ポインタを使用すると、そのポインタが指し示すメモリ領域の値を書き換えることもできます。

以下は、ポインタが指し示す値を書き換える例です。

int* ptr = new int;
*ptr = 10;
std::cout << *ptr << std::endl;
*ptr = 20;
std::cout << *ptr << std::endl;

このコードでは、最初にポインタptrが指し示すメモリ領域に10という値を代入し、その値を参照しています。

その後、同じポインタを使用して値を20に書き換え、再度参照しています。

結果として、コンソールには 1020 と表示されます。

ポインタのメモリを解放する

new演算子で確保したメモリは、使用後に必ず解放する必要があります。

解放しないと、メモリリークと呼ばれる問題が発生する可能性があります。

ポインタのメモリを解放するためには、delete演算子を使用します。

以下は、ポインタのメモリを解放する例です。

int* ptr = new int;
*ptr = 10;
std::cout << *ptr << std::endl;
delete ptr;

このコードでは、最初にポインタptrが指し示すメモリ領域に10という値を代入し、その値を参照しています。

その後、delete演算子を使用してポインタのメモリを解放しています。

メモリを解放した後に、解放したメモリを参照すると未定義の動作が発生するため、解放後のポインタの使用には注意が必要です。

また、2重解放も避ける必要があります。

確保したメモリは必ず解放する

プログラミングにおいて、メモリの管理は非常に重要です。

特に、new演算子を使って動的にメモリを確保した場合は、確保したメモリを必ず解放する必要があります。

解放しないと、メモリリークと呼ばれる問題が発生します。

解放しないとどうなるのか?

メモリリークとは、プログラムが終了するまでに解放されなかったメモリ領域のことを指します。

メモリリークが発生すると、プログラムが使用するメモリ領域が増え続けてしまい、最終的にはシステムのパフォーマンスに悪影響を及ぼす可能性があります。

また、メモリリークが続くと、プログラムが使用するメモリ領域が限られている場合には、メモリ不足のエラーが発生することもあります。

これは、プログラムが必要なメモリを確保できないため、正常に動作しなくなるという問題です。

2重解放にも注意

一方、メモリを解放する際には、2重解放にも注意が必要です。

2重解放とは、同じメモリ領域を複数回解放しようとすることです。

2重解放が発生すると、プログラムが予期せぬ動作をする可能性があります。

2重解放が発生する主な原因は、同じポインタを複数回delete演算子で解放しようとすることです。

ポインタが解放済みの状態で再度解放しようとすると、未定義の動作が発生する可能性があります。

2重解放を防ぐためには、解放済みのポインタを再度解放しないように注意する必要があります。

また、ポインタを解放した後には、そのポインタを使用しないようにすることも重要です。

以上が、確保したメモリを必ず解放する重要性と、2重解放に注意する必要性です。

メモリの管理はプログラミングにおいて欠かせない要素であり、適切なメモリの確保と解放を行うことで、プログラムの安定性とパフォーマンスを向上させることができます。

目次から探す