ページ 11

constメンバの初期化

Posted: 2009年4月02日(木) 19:24
by kazuoni
お邪魔します。
抽象的なタイトルしかつけれませんでした。。

まず下のコードを見てください。
class x{
private:
	const int abc;
public:
	x();
	~x() {}
}

x::x()
{
	y::CreateInstance();//シングルトンclass y の生成、初期化
	abc(y::accesser());//初期化するにも上には持って行けない・・・
}
やりたいことは、シングルトンクラスy生成後、
yのアクセッサで戻ってくる値でクラスxのメンバabcを初期化したいのです。
もちろん上のようには書けません。
どうしたらうまく初期化ができるのでしょうか?
もし不可能だとしたらどうしたらよいでしょうか?

自分なりに考えて、クラスを作りました。
一度代入されたらそれ以後は代入を受け付けない
っというようなものです。(constをまねする感じです)
が、これだと、どこで一番最初に代入されたのかが分かりづらくなります。
なので、このクラスは廃止しました。。

よろしくお願いします。

Re:constメンバの初期化

Posted: 2009年4月02日(木) 19:43
by kazuoni
・・・シングルトンクラスの生成、初期化を前にずらすが一番なんですかね?^^;

Re:constメンバの初期化

Posted: 2009年4月02日(木) 19:48
by Justy

>どうしたらうまく初期化ができるのでしょうか

 技術的には
 
x::x()
: abc((y::CreateInstance(), y::accesser()))
{
}

でできますが、根本的にこのシングルトンを事前に生成しておくのがいいかと
思います。

 あるいは、accesser()の中でシングルトンを生成してしまっても
いいかもしれません。

Re:constメンバの初期化

Posted: 2009年4月02日(木) 20:15
by kazuoni
Justyさん、ご回答ありがとうございます!

>根本的にこのシングルトンを事前に生成しておくのがいい
自分もそう思いました^^;
初期化はやはりその意味のみを持たせたほうがいいですね。
今回は事前に生成っということで解決にさせていただきます。

ご回答ありがとうございました!