掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
例外は具体的にどこが重くなるのでしょうか (ID:69355)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
設計上のトレードオフがありますので、 どこがどれだけ重いかは、処理系(コンパイラ)の実装によります。 > 例外が実際に投げられた時なのか、 > それをcatchしたときなのか、 例外が発生すると、例外オブジェクトの投入もそうですが、 その他のオブジェクトのデストラクタが走ります。 また、例外オブジェクトは通常複製されます。 > 投げられなくてもtry{}catch{}で例外に対処するコード自体が重いのか try節では、仮に例外が投げられなくても、投げられたときに備えて、 どのオブジェクトを開放する必要があるかを記録する必要がありますので、 tryがないときに比べれば重くなりますが、どの程度かは処理系によります。 とはいえ、必要な処理であって無駄に重いわけではないです。 但し、同様な処理を自分でロングジャンプで実装することに比べれば安全で、 それなりに効率もよいはずです。 C++の方針としては「使わない機能のためのオーバヘッドを受けない」 C言語などで例外を一切使わない場合に比べれば重いのは、 その分の処理(自動開放)があるためです。 その必要がないならばtryを使わなければよく。 モット効率的に自分で実装できるか、恩恵がどれだけあるかで考えればいいのかと。 # とはいえ、C++の標準ライブラリも例外を投げうるものが多いので、 # 使えないものが増えて、旨みがなくなると思いますが…。 他言語と比較して、という意味だと、ガベコレがついてる言語では 開放処理についてあまり備えておく必要がない分(後で開放されるので)、 例外処理がお手軽なわけですが、C++のように開放タイミングを特定するためには 自分で処理を書くしかないという面倒くささとのトレードオフになります。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.