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


動作環境
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