2008-03-01から1ヶ月間の記事一覧
その1。 typedef void (__stdcall * Func)(); template<class F> F GetProcAddress2(HMODULE module, LPCSTR name) { F f = reinterpret_cast<F>(::GetProcAddress(module, name)); _ASSERT(f); return f; } Func f = GetProcAddress2<Func>(dll, "Func"); ってASSERT挟んだだ</func></f></class>…
struct A { A(A* = 0) {} void foo() {} }; int main() { A obj = new A(); obj.foo(); return 0; } 上記のコードはコンパイルも実行も普通にできます。最初見たときはちょっとびっくりしましたが、普通にコンストラクタが呼ばれるんですね。当然、 new で確…
以下のコードをコンパイルすると cl.exe が強制終了します。バージョンは VC8 。 #include <boost/bind.hpp> struct Hoge { void foo(int) {} }; void main() { Hoge hoge; boost::bind(&Hoge::foo, hoge); } まぁコンパイルの通らないコードなので落ちても構わないのですが</boost/bind.hpp>…
#include <map> #include <boost/foreach.hpp> void f() { std::map<int, int> m; BOOST_FOREACH(std::map<int, int>::value_type const& iter, m) { } return 0; } これ VC8 でコンパイルが通りません……。エラーが大量に出るのですが、その前に BOOST_FOREACH の引数が多すぎると言う警告(C4002)が出るの</int,></int,></boost/foreach.hpp></map>…
new や malloc を自分で定義すればメモリ領域を確保する度にそれを記録することができます。前のエントリで VC++ でメモリリークの検出を行えるようにしてみましたが、それをとても簡略化したものを試しに自分で実装してみました。かなりいい加減ですが(テス…
VC++ のライブラリにはメモリリークの検出機能があります。関数ひとつ呼んでおくだけでアプリケーション終了時にメモリの解放漏れを出力ウィンドウに表示してくれるという便利なものなのですが、実際にこれを使うまでの過程に罠が多いのでメモしておきます。…