ページ 11

SP6章のメンバ初期化子リスト?について

Posted: 2019年12月16日(月) 02:12
by むへーれ
ゲームプログラミングの館SP6章の

コード:

/*BaseScene.cpp*/

#include "BaseScene.h"
#include "DxLib.h"

BaseScene::BaseScene(ISceneChanger* changer) : 
    mImageHandle(0) {
    mSceneChanger = changer;
}

void BaseScene::Finalize(){
    DeleteGraph(mImageHandle);
}

void BaseScene::Draw(){
    DrawGraph(0,0,mImageHandle,FALSE);
}
のうち

コード:

BaseScene::BaseScene(ISceneChanger* changer) : 
    mImageHandle(0) {
    mSceneChanger = changer;
}
これがメンバ初期化というのは分かったのですが、なぜmImageHandle(0)の中でmSceneChanger=changerを行っているのかがよくわかりませんでした
mImageHandleを使わない場合でもmSceneChanger=changerというのは必要だと思うのですがmSceneChanger(changer){}という書き方ではだめなのでしょうか

Re: SP6章のメンバ初期化子リスト?について

Posted: 2019年12月16日(月) 16:38
by usao
文面から察するに,ちょっとコードの読み方を間違っていると思う.

コード:

BaseScene::BaseScene(ISceneChanger* changer) 
    : mImageHandle(0)  //←メンバイニシャライザ
{
    //ここはコンストラクタの実装
    mSceneChanger = changer;
}
mImageHandleを0に初期化する記述にはメンバイニシャライザを使っているが,
mSceneChangerに関しては,コンストラクタの処理にて引数の値を代入している.

この例は「初期化or代入」で何かしらの違いが出る場面でもないだろうから,

コード:

BaseScene::BaseScene(ISceneChanger* changer) 
{
    //ここはコンストラクタの実装
    mImageHandle = 0;  //普通に0を代入
    mSceneChanger = changer;
}
でも

コード:

BaseScene::BaseScene(ISceneChanger* changer) 
    : mImageHandle(0)  //←メンバイニシャライザ
    , mSceneChanger( changer )  //←こっちもメンバイニシャライザで初期化するぜ!
{
    //ここはコンストラクタの実装(何もやることないです)
}
でも,好きに書けば良いと思う.

Re: SP6章のメンバ初期化子リスト?について

Posted: 2019年12月16日(月) 19:33
by むへーれ
() {}となっていても繋がっているわけではないのですね
ありがとうございます