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
Author And Source
この問題について(c++ > コンストラクタでのtry, catch), 我々は、より多くの情報をここで見つけました https://qiita.com/7of9/items/e74787055bf01804fdf1著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .