UE5/UE4 C++でのクラス(UCLASS)や構造体(USTRUCT)でのメンバ変数の初期化タイミングについて
C++でのクラス(UCLASS)や構造体(USTRUCT)でのメンバ変数の初期化タイミングについてです。
とある状況でエラーがかなりでたので備忘録として…。
こちらを参考にさせていただきました。
・[UE4] メンバ変数の初期化について
https://qiita.com/ykobayashi0/items/e3696ffffc0f9aef8590
公式ドキュメントはこちら。
・Unreal でのオブジェクト処理
https://docs.unrealengine.com/5.0/ja/unreal-object-handling/
基本的には以下の順番で初期化されるようです。
見やすさや、わかりやすさであれば初期化リストがいいのかなと個人的には思います。
というわけで一応自分でもコードを書いてみました。
まずはヘッダーでのクラス定義。
一度書いて覚えてしまえばあまりメモなど必要はないと思いますが、
はじめたてなどで躓くことがあれば…みたいな感じとして覚えておければと思います。
とある状況でエラーがかなりでたので備忘録として…。
こちらを参考にさせていただきました。
・[UE4] メンバ変数の初期化について
https://qiita.com/ykobayashi0/items/e3696ffffc0f9aef8590
公式ドキュメントはこちら。
・Unreal でのオブジェクト処理
https://docs.unrealengine.com/5.0/ja/unreal-object-handling/
基本的には以下の順番で初期化されるようです。
ヘッダーかコンストラクタの初期化リストで初期化するのがよさそうです。①ヘッダーでの初期化
②コンストラクタでの初期化リストでの初期化
③コンストラクタ内での初期化
見やすさや、わかりやすさであれば初期化リストがいいのかなと個人的には思います。
というわけで一応自分でもコードを書いてみました。
まずはヘッダーでのクラス定義。
次にコンストラクタです。// クラス定義
UCLASS()
class UNewClass : public UObject
{//
GENERATED_BODY()
public:// コンストラクタ
UNewClass();public:// 一番早いタイミングで初期化される。ヘッダーで初期化。
int32 InitialiizeValue = 1;}
// コンストラクタ
UNewClass ::UNewClass (): InitialiizeValue(2) // 二番目に早いタイミングで初期化される。初期化リストで初期化。{// 三番目に初期化されるタイミング。代入と同じ扱い。
InitialiizeValue = 3;}
一度書いて覚えてしまえばあまりメモなど必要はないと思いますが、
はじめたてなどで躓くことがあれば…みたいな感じとして覚えておければと思います。
| UE5 | 10:00 | comments:0 | trackbacks:0 | TOP↑