LoginSignup
1
2

More than 5 years have passed since last update.

c++ > コンストラクタでのtry, catch

Last updated at Posted at 2016-07-11
動作環境
C++ Builder XE4

あるUDPポートを使う処理が実装されているフォームがある。

そのフォームを異なる2つのソフトで実装すると、2つのソフトは同時起動時に「アドレスとポートは既に使われています」のエラーが出る。

2つのソフト同時起動時に片方のソフトからのUDPポート使用をOFFにする、という方針であれば同時起動は可能となる。

このUDPポートを使う処理はフォームにおいてIndyのTIdUDPServerを使っている。「TIdUDPServerのActivateプロパティをtrueにする時にtry, catchでエラーがcatchされる時に、そのソフト側ではUDPを使わない」とすれば良いかと思う。

try {
    IdUDPServer->Active = true;
} catch (...) {
    // IdUDPServerを使わないフラグを立てる
}

気になったのは、「コンストラクタでtry, catch()を使っていいのかどうか」。

「コンストラクタで例外を送出する」件については禁止している本の記載があったり、以下のようなリンクの情報があったりする。
http://www.kijineko.co.jp/tech/superstitions/dont-throw-exception-from-constructor.html

上記のコードの場合は例外送出ではなくIdUDPServer不使用フラグを立てるだけなので問題ないかと考えているが、実際のところはどうなのだろうか。

問題がある場合はOnCreate()での対応も検討している。

以下も関連ありそう。
http://d.hatena.ne.jp/slayer845/20091228/1262012011
http://d.hatena.ne.jp/slayer845/20091231/1262235480

1
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2