#define new の罠
STLはとても便利&強力なC++の標準ライブラリで、かなりお世話になるんですが、エラーが難解なことで有名でもある。
VisualStudioで開発してて、ハマった「わかると、何でもないエラー」をメモしておく。
template
,
typename alloc=std::allocator>
class Hoge
{
…略
こんなテンプレートクラスを定義して、このクラスを使おうとして出たエラー。
xmemory(44) : error C2665: 'operator new' : 5 オーバーロードのどれも、すべての引数の型を変換できませんでした
これ。
operator new がどうやら正常に動いていないという。
でも、クラスの定義を確認してもとくにおかしな点はない。
うーん、、、
ううーん、、、
と2時間ほど悩まされた原因が、
#ifdef _DEBUG
#define new DEBUG_NEW
#endif#include "Hoge.h"
こいつだったと知った時、がっくり来ました orz
#include "Hoge.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
これで解決。
まさか、こんな近くに原因があるとわ…
灯台なんとかっていうし、意外と見落としがちだから気をつけよう。っていう自分への備忘録。
【関連記事】
[C++]atldbgmem.h
(ここでヒントをもらいました。ありがとうございます。)