MASATO3のプロフィール

@MASATO3 MASATO3
ありがとう数39
質問数0
回答数64
ベストアンサー数
27
ベストアンサー率
60%
お礼率
0%

  • 登録日2004/09/24
  • try{}catch(){}とデストラクタの関係を教えてください。

    try-catchでメモリ確保を含むクラスをスローした場合、デストラクタはどの時点で働くのか、教えてください。たとえば、↓の使いかたは大丈夫でしょうか? 【1】 try{  throw(CError(100, "エラー情報")); }catch(CError& err){  //ここでerrを参照しても問題ないのでしょうか? } 【2】 try{  CError err(100, "エラー情報");  throw(err); // (1) }catch(CError& err){  //ここでerrを参照しても問題ないのでしょうか?  //まだデストラクタはちゃんと動作するのでしょうか?  //catchが呼び出し元のメンバであったりしても大丈夫なのでしょうか? } 宜しくお願いします。

  • STL に適合するようにクラスを書くとき皆さんはどうしているのでしょう

    大した質問ではないのですが、例えば適当に vector っぽいクラスを template<typename T> class HeppokoVector { private:  いろいろ省略 public:  void push_back(T const& val); }; のように設計したとしましょう。ヘッポコとは言え vector なので STL の std::copy を使って、HeppokoVector<char> hoge; に既存の vector<char> foo; の内容を std::copy(foo.begin(), foo.end(), std::back_inserter(hoge)); な感じでコピーしたいと思いましたが、コンパイルすると 「reference : は HeppokoVector<T> のメンバーではありません」 などと怒られます。back_insert_iterator の定義を見れば、reference や const_reference の定義が必要なので、 template<typename T> class HeppokoVector { private:  いろいろ省略 public:  typedef T& reference;  typedef T const& const_reference;  void push_back(T const& val); }; な風に修正するわけですが、皆さんは自前でコンテナを作る時などに、あらかじめ「コレコレの typedef は必要だな」とか知った上で作成しとるのでしょうか? きっと私が適当なだけなのでしょうが、back_insert_iterator のドキュメントを見ても、push_back が必要であることしかわかりませんでした。

    • koko_u_
    • 回答数3
  • CAsyncSocketのOnConnectがスレッド内で反応しません

    VC++でCAsyncSocketの派生クラス(class ClientSocket)を作り このクラスでクライアント接続するソフトを作っているのですが、 ( ClientSocket は非ブロッキングモードのストリームソケットで、  OnConnect,OnReceave,OnCloseをオーバーライトしています。) ワーキングスレッド内でClientSocketを使おうとするとOnConnectなどが反応せず悩んでいます。 (メインスレッドで使った場合は反応します。) 一応CAsyncSocketが不可視のウィンドウを持ち、そこでウィンドウメッセージを受け取りOnConnectなどを呼び出していることはわかったのですが、ワーキングスレッド内ではウィンドウメッセージが伝わらないのでしょうか。 どうかご教授のほどお願いしたします。 http://oshiete1.goo.ne.jp/qa159828.html にも似た症状の方がいたのですが解決してないようです。

    • Kyo99
    • 回答数1
  • VC Debugモード

    Visual Stdio .NET 2003 環境のDebugモードについて質問があります。 開発言語は C++です。 今、コマンドライン引数を以下のように設定し、ファイルに保存された 情報を処理するプログラムを作成しています。 test1.exe 0 ./input.txt ↑ [実行ファイル名][検索したい文字][処理したいファイルへのパス] 上のように入力した場合、argcは[3]を返すと思うのですが、Debug モードでいざ実行してみると、値は「4」となっていました。 コマンドライン引数はVCの「プロジェクト」→「**のプロパティ」 →左ウィンドウの「デバッグ」→右ウィンドウの「コマンド引数」に 上のように設定しています。 また、Debugモードでargv[0]を調べたところ、実行ファイルまでのパス が保存されていました。 なぜ、このようになるのでしょうか? あと本題からそれるのですが、ソースの中でVCがDebugモードで動作していることを知る方法はないでしょうか? もし、Debugモードなのかどうかがわかるのであれば、ソースをDebug モード用とReleseモード用とに切り替えられるようにしたいのですが。。。 合わせてお教えください。

    • wweerr
    • 回答数2
  • private継承はどう使う?

    C++の話です class Base{.....}; class Derived1 : public Base{.....}; class Derived2 : private Base{.....}; と書くことができますが、public継承とprivate継承にはそれぞれ意味がありますよね。 public継承は"is-a"関係を意味していて、private継承は "is-implemented-in-terms-of"関係を表していると言います。 public継承を実際に動くプログラムは思いつくのですが、private継承を使ったプログラムが思いつきません(というより有効に使えません) 派生クラスから呼び出せない、外部からも呼び出せないメンバをどう使うのでしょうか?

    • sirn
    • 回答数4