オブジェクトに関する変数の初期化について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
shuka
記事: 5
登録日時: 5年前

オブジェクトに関する変数の初期化について

#1

投稿記事 by shuka » 5年前

別のトピックで話していて気になったことがありききたいのですが、論点がずれてしまうので新たにトピックを立てました
オブジェクトにかかわる変数の初期化についてなのですが、こちらで紹介いただいたサンプル(というか見本?)ではmain関数の中で

コード:

init //初期化系の関数
.     //ここですべて初期化
.
while(1){
update//現在の状態などを計算、パラメータなどを更新する関数
.
.
draw//各オブジェクトを画面上に描画する関数
.
.
}
といった感じで書かれていましたが、初期化に関しては私が別トピックであげたような初期化でも問題ないのでしょうか具体的に言うと
main.cpp

コード:

#include"library.h"
#include"class.h"
int main{
	init//初期化する関数
	.    //ここでは初期化してないオブジェクトがある
	.
	while(1){
		updt//パラメータを更新する関数
		.
		.
		draw//描画する関数
		.
		.
	}
}
}
class.h

コード:

class mcls{
	static int cls;
public:
	update
	draw
};
class.cpp

コード:

#include"class.h"
int mcls::cls=1 //ここでmclsが扱うオブジェクトを初期化
update//定義
draw//定義
のような形でも問題ないのでしょうか
よろしくお願いします

アバター
usao
記事: 1887
登録日時: 11年前

Re: オブジェクトに関する変数の初期化について

#2

投稿記事 by usao » 5年前

何の話なのかいまいち掴みかねるのですが,
「最初に,ある1箇所において,全て(?)を初期化するべきかどうか」みたいな話…?

「初期化」が必要な対象というのは様々あるでしょうから,色々な要素(例えば下記)を鑑みて,適切なタイミングで「初期化」を行えば良い.

・何らかの明示的な「初期化」の後にしか正常にやれないことがあるなら,それよりも前に「初期化」する必要がある
・ある対象は複数回「初期化」されるようなものなのか,1回だけなのか(2回やったらまずいのか?)
・使いもしないかもしれない対象に関する「初期化」(あるいは生成)は,必要になるまで遅らせる
・「初期化」処理がやたら重いとか,一般に失敗し得る処理であるとか,そういう理由で,ある程度先に「初期化」を終わらせておく方が良いかもしれない
・etc...

アバター
usao
記事: 1887
登録日時: 11年前

Re: オブジェクトに関する変数の初期化について

#3

投稿記事 by usao » 5年前

…なので,

>問題ないのでしょうか

に関しては,あなたが「初期化」する対象の性質や使われ方に依存する話.
問題が発生していないなら,問題ないのかもしれないし,問題が表面化してないだけで存在はするのかもしれない.

例えになるかどうかわかりませんが,
下記の単純なコード例で,bの未初期化が問題となるのか否かは,以降のコードでのbの使われ方次第でしょう.

コード:

int main()
{
  int a = 10;
  int b;  //←初期化(初期値の明示的な指定)してないけど,いいの??
  ...
  aやbを使った何らかの処理
  ...
}

アバター
shuka
記事: 5
登録日時: 5年前

Re: オブジェクトに関する変数の初期化について

#4

投稿記事 by shuka » 5年前

usao さんが書きました:
5年前
>問題ないのでしょうか

に関しては,あなたが「初期化」する対象の性質や使われ方に依存する話.
問題が発生していないなら,問題ないのかもしれないし,問題が表面化してないだけで存在はするのかもしれない.
予想はしていたんですが、やはり初期化してないオブジェクトをどうしたいのかや、私(使い手)次第ということですね

ありがとうございます

アバター
usao
記事: 1887
登録日時: 11年前

Re: オブジェクトに関する変数の初期化について

#5

投稿記事 by usao » 5年前

「初期化」を行うのは,それをする理由があり,初期化を行うタイミングにも理由がある.

> 初期化してないオブジェクト
という物(状態)を{わざわざ,あえて,etc}作っているなら,そこにはそれなりの理由があるハズ.

> 初期化系の関数
なんてものを作って,そこで初期化処理をまとめているのにも,やはり理由がハズ.


> 私(使い手)次第
という言葉の中に,しっかりと理由が入っていれば良いのではないでしょうか.

返信

“C言語何でも質問掲示板” へ戻る