C++

STLメモ

C++

これは何? STLの概要が理解できたので、メモります STLの利点・弱点 利点 実装量の低下 弱点 コンパイルサイズが大きくなる コンパイル時に意味不明なエラー 対応デバッガが無い コンテナ データの集合を管理するテンプレート 特徴別にいろんなコンテナがあ…

FAQ形式でデストラクタにvirtualを付ける理由をまとめてみた

C++

Q1: デストラクタにvirtualをつけろとよく言われるけど、なんで? 挙動が未定義のdeleteを呼び出す可能性があるから Q2: 挙動が未定義だと駄目なの? 超駄目。何が起きても文句は言えない Q3: どんな時に挙動が未定義のdeleteが呼び出されるの? こんなとき …

スレッドについてもう少し

C++

こないだの続き 各スレッドについてもうちょっと調べたので、追記 またもやWIN32のみのお話です _beginthread(ex)の戻り値の型は、__w64 unsigned int __w64は、64bit移植性について問題がありそうな場合、警告を出す 参考:32bit→64bit移植性を32bitコンパ…

スレッドを調べまわって分かったことをメモ

C++

こうですか?分かりません!>< WIN32のみのお話です。 スレッドって結構実装依存なのね…。 先にまとめ windowsは_beginthreadex推奨(CreateThreadはメモリリークの危険あり) _beginthread、_beginthreadexを呼び出すには、process.h をinclude _beginthrea…

キャストを調べまわってわかった事をメモ

C++

こうですか?分かりません!>< 従来のキャストは超危険 無条件で変換できちゃう そもそもどういった目的でキャストしているのか判らない 括弧で括るだけなので、grepで探しづらい 設計側としては非推奨 新しいcast 目的別にキャストを分ける どういった理…

stack overflowが発生した時の対策。

C++

対策 以下のいずれか。 でかいメソッドだったら分割する。 最後まで使わないメンバ変数は中括弧で括って途中で破棄させる。 でかいメンバ変数は、newで宣言する。 でかい配列は、std::vectorにする。 スタック領域を拡張する(非推奨) 原因 メンバ変数は、ス…

warning LNK4204 の回避方法と詳細。

warning LNK4204: '〜vc80.pbd' に参照するモジュールのデバッグ方法がありません。デバッグ情報を無視してオブジェクトをリンクします。 原因 VC++のデバッガの機能「エディット・コンティニュー」が、自身ではアクティブであるが、依存している他のプロジ…

MFC覚え書き(CCmdTarget〜)

C++

これは何? どーにもこーにもお仕事に使っているC++になじめないので、苦手な部分、知らなかった部分を取りまとめてブログに書くシリーズです。 C++脱初心者を目指す人レベルと思ってます。 ちなみに環境は、主にVisual C++ 2005 Express EditionとVisual C+…

リソースファイルに手動でダイアログをマージする方法

注意事項 この方法が推奨される方法かどうかは不明です。 自己責任で真似てください。 事前準備 ダイアログや画面パーツのIDが被っている箇所は先にダイアログエディタで修正しておく。 後から被ってることがわかると大変面倒です。 マージ手順 マージ元のリ…

MFC覚え書き(概要〜CObject)

C++

これは何? どーにもこーにもお仕事に使っているC++になじめないので、苦手な部分、知らなかった部分を取りまとめてブログに書くシリーズです。 C++脱初心者を目指す人レベルと思ってます。 ちなみに環境は、主にVisual C++ 2005 Express EditionとVisual C+…

複数のDLLからスタティックライブラリ内のシングルトンのクラスを呼ぶと大変なことに。

c++

先に結論 DLL毎に異なるインスタンスが生成されます! なので、スタティックライブラリにせず、DLLにするべき どうしてもスタティックライブラリにしたい時は、シングルトンのクラス取得用のDLLを作れば大丈夫 実験 たとえばこんなのがあるとします。 ここで…

初期化リスト覚え書き

C++

これは何? どーにもこーにもお仕事に使っているC++になじめないので、苦手な部分、知らなかった部分を取りまとめてブログに書くシリーズです。 C++脱初心者を目指す人レベルと思ってます。 ちなみに環境は、主にVisual C++ 2005 Express EditionとVisual C+…

windowsで使える各種時間取得関数の精度まとめ

先に結論 各関数の分解能*1は以下の通り メソッド名 分解能 getLocalTime 10ms程度 timeGetTime 1ms単位で指定 QueryPerformanceCounter 1秒毎の取得回数をLARGE_INTEGER(64bit int)で指定 経緯 getLocalTimeでアプリの性能計測していた所、1ms単位のシビア…

System:Stringを色々な型に変換

これは何? System:Stringを色々な型に変換するサンプルコードです。 経緯 VisualC++のwindowsFormでは、テキストボックスの入力値の型はSystem:String。 System:Stringは加工が面倒。 なので、System:Stringを色々な型に変換するユーティリティがあると便利…

staticでないクラスメンバ関数を_beginthreadで実行させる方法。

C++

クラスメンバ関数を_beginthreadする場合、メンバ関数はstaticでなければならない。 非staticなメンバ関数を実行したい場合は、以下のようにstaticでなメンバ関数をかませて実行する。 // スレッドを発生されるクラス class Test { :private HANDLE thread; …

VisualC++でテンプレートをCPP側で実装できない件

結論 VisualC++コンパイラの仕様上、CPPには実装できない。 但し、明示的実体化を行うことで、実装可能。 例 TemplateClass.h:テンプレートのヘッダ template <class T> class TemplateClass { // コンストラクタ TemplateClass(T* t); int getValue(); }; TemplateC</class>…

テンプレート概要

c++

c++でテンプレートを使ったので、簡単な概要を。 テンプレートって何? 関数やクラスで型を任意のまま実装可能。 そして、実際に関数を利用するときや、クラスを宣言する時に型を指定。 コンパイラは、指定部分を見つけると、型に対応したコードを自動生成。…

DLLの概要と実装方法。

VisualStudio2005のC++で、DLLを作ることになったので、そのまとめ。 注意! VisualStudio2005を使ったDLLの実装方法です。他の環境ではたぶん当てになりません。 また、/clr:pureでDLLを呼び出す場合の実装方法もよくわかっていない為、その辺もご理解の上…