犬も猫も空想も扱っておりません。(旧・エト記)この広告は、90日以上更新していないブログに表示しています。スコープの話C++C++を生業にしてかれこれ8年くらい。C++を現実の問題を解くための単なるツールという本来の役割として活用はしているものの、ここ数年あまりC++の言語仕様については深く調べていない。私を含めて今のチームのメンバーはみんな現場のオッチャンプログラマなのだ。久々に、ドキッとするバグをみたのでメモしておこう。とあるフレームワークでは、C++でObserverパターンを実装している。Observableの派生クラスから任意のイベントオブジェクトを通知し、Observerは飛んできたイベントのタイプに応じて、自分自身に必要な処理をする。ここでは詳細には踏み込まないが、そのフレームワークではイベントのタイプを識別するのに、C++のオブジェクトシステムが提供するRTTI実行時型情報を利用している。具体的には、Observerが抽象的なイベント型を引数にとる仮想関数を持っていて、実際のObserverの導出クラスの実装でdynamic_castを使ってイベントのタイプを判別する。イベントの種類をC++のタイプにマップしているのである。イベントハンドリングの仕組みは、大体こんな感じ。20このコードは意図したとおりに動いている。今日レビューで発見したのは、以下のようなコード。}}知らなかったけど、これビルドが通ってしまう。直後のdynamic_castは失敗し、evはNULLで初期化される。10という結果になる(仮想関数呼び出しではないのでヌルポインタに対してメンバ関数が呼べる)。}}と等価ということなのかねェと気付いたしだい(オッチャンプログラマは原典は当たらない)。何とかこれは、先輩によるコードレビューの段階で気付くことができて、コミット未遂で済んだけど、何年使っても未だに落っこちることのできる落とし穴があるとは。奥ゆかしきかなC++。正確に言うと、insertが同種のset/mapに比べて圧倒的に遅い。~setの使いどころ~C++エクササイズその3。前回、前々回の実験で、setの良さが発揮...2014-08-14コンテナ内の検索の速度について追記:この記事には続きがあります。C++エクササイズその2。前...2014-08-14コンテナへの挿入の速度についてC++エクササイズ。今回は挿入の速度に的を絞って計測してみた。問題Archiveはてなブログをはじめよう!xoinuさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。