• ベストアンサー

2つの初期化の違いとは?

C言語の初期化とC++のコンストラクタのメリット・デメリットと違いはなんですか?

質問者が選んだベストアンサー

  • ベストアンサー
  • MrBan
  • ベストアンサー率53% (331/615)
回答No.1

メリットは、自動的にコンストラクタが呼ばれていることが保証でき、init等の初期化関数の呼び漏れがない。 面倒な初期化処理をプログラマが毎回書く必要がない。 コンパイラが暗黙に呼び出して処理してくれるため、 自作のクラスでも限りなくネイティブの型に近い扱いができる。 などなど。 デメリットなんてほぼないのでは?と個人的に思います。 そこだけをみて処理の負荷とか気にする人もいますが、 結局C言語でも初期化関数を呼んでから使わないと 正しく動かないから所期かなのでしょうし、 必要なら(あまり通常は使いませんが)、メモリでの初期化には配置newなども使えますし。 あえて書けば、グローバル変数の初期化タイミングの問題くらいですが、そもそもC++でグローバル変数なんて(ry

nVIDIA
質問者

お礼

Cの時毎回初期化するのめんどいし、 よく初期化忘れて実行したら警告が出て、 あわてた事良くありました。 そういえばC++はじめてから、 初期化は最初のみで書いた覚えないなぁ。 これがコンストラクタのいいところなのかぁ ありがとうございます。 デスコンストラクタって?

その他の回答 (2)

  • MrBan
  • ベストアンサー率53% (331/615)
回答No.3

constructor と destructor が混ざってるのでは?>デスコンストラクタ? デストラクタのメリットは、もっと大きいと個人的に思います。 変数の解放/終了処理などを毎回書かなくていいのは、 関数からのエラー復帰処理などでかなり便利です。 C言語風の終了処理だと、C++で例外が投入されたら 呼び出されませんが、デストラクタは呼び出し保証がありますし。 (まぁ便利な反面、仮想デストラクタまわりとか、トラップも多いですが…

nVIDIA
質問者

お礼

デストラクタについて詳しく分かりやすい説明ありがとうございます。 #2さんにも書きましたが、 デストラクタを「デスコンストラクタ」なんて書いて恥ずかしいです>< ^^;テヘ また、分からないことがあったら教えてください^^

  • Trick--o--
  • ベストアンサー率20% (413/2034)
回答No.2

> デスコンストラクタって? 「デストラクタ」 クラスが破棄されるときに呼ばれる関数。 クラス名の頭に~をつけたものが使われる。 ……っていうこと? コンストラクタでメンバ変数に領域を割り当てて(new)、デストラクタで開放する(delete)とかいうふうに使ったり。

nVIDIA
質問者

お礼

デストラクタでした はずかしい~>< ご返事ありがとうございました。

関連するQ&A