構造体 (struct)
構造体の定義
構造体の効率的な初期化
C++11以降では、構造体の初期化にリスト初期化を使用できます。しかし、いくつものメンバを持つ構造体を扱う場合、リスト初期化も現実的ではありません。代わりに、コンストラクタを提供して一括で初期化を行う方法が考えられます。
struct MyStruct {
int a;
double b;
};
struct MyStruct {
int a;
double b;
// 他に998個のメンバがあると想定
MyStruct() : a(0), b(0.0) {
// 他のメンバも適切に初期化
}
};
構造体の使用
構造体をインスタンス化して使用するには、以下のようにします。
MyStruct instance;
構造体の解放
構造体のインスタンスがスタック上に確保されている場合(上記の例のように)、プログラムがそのスコープを抜けると自動的に解放されます。ヒープ上に確保した場合(new
を使用した場合)、delete
を使用して明示的に解放する必要があります。
MyStruct* instancePtr = new MyStruct;
// instancePtrを使用
delete instancePtr; // ヒープ上のインスタンスを解放
効率的な初期化と解放のためのヒント
- 大量のメンバを持つ構造体に対しては、適切なコンストラクタを定義して、初期化を一括で行うことが重要です。
- ヒープ上にオブジェクトを確保する場合は、リソースの解放を忘れないようにしてください。
- C++11のリスト初期化や、コンストラクタを使用した初期化は、コードを簡潔かつ読みやすく保つのに役立ちます。
- スマートポインタ(
std::unique_ptr
,std::shared_ptr
)を使用すると、ヒープ上のオブジェクトのライフタイムを自動的に管理でき、メモリリークを防ぐことができます。