operator new のオーバーロード

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
tatra
記事: 5
登録日時: 15年前
住所: ふくしま

operator new のオーバーロード

#1

投稿記事 by tatra » 13年前

operator new のオーバーロードについて質問があります

以下の様な引数のoperator newを定義してみたのですが
マルチバイト文字セットの時には問題なく動作するのに
UNICODEでこの関数を使おうとすると以下の様に引数型が違うと言われてしまうのですが
~~~~~
error C2665: 'operator new' : 6 オーバーロードのどれも、すべての引数の型を変換できませんでした
~~~~~

UNICODEコンパイルの時のoperator newに必要な引数はどのようになっているのでしょうか?

まだインターネットなどで調べている途中なのですがなかなか見つからないので
暇な時で良いので良ければみなさんの力をお貸しください

ちなみに環境は Visual Studio C++ 2008 でコンパイルしています
よろしくお願いします

コード:


//////////
//	: operator new のオーバーロード
void* operator new(size_t iSize, LPCTSTR sFile, LPCTSTR sFunc, UINT iLine){
	~~ 略 ~~
};

//////////
//	: operator delete のオーバーロード
void operator delete(void* pv){
	~~ 略 ~~
};
//////////
//	: 
#define new new(__FILE__, __FUNCTION__, __LINE__)

//////////
//	: メイン関数
int main(int argc, char* argv[])
{
	int* intPointer = new int ;
	delete intPointer ;
 	return 0;
}


Blue

Re: operator new のオーバーロード

#2

投稿記事 by Blue » 13年前

__FILE__はconst char*の値を返すようです。

UNICODEでビルドするときは LPCTSTR はconst wchar_t* となるので型が不一致になるのでしょう。
関数の中で LPCTSTR に変換するように変えてみては。

コード:

void* operator new(size_t iSize, LPCSTR sFile, LPCSTR sFunc, UINT iLine){
    ~~ 略 ~~
};

tatra
記事: 5
登録日時: 15年前
住所: ふくしま

Re: operator new のオーバーロード

#3

投稿記事 by tatra » 13年前

なるほど…
参考にしていたコードが LPCTSTRとなっていたので LPCTSTRを返すと思っていました

ありがとうございました!

hoge

Re: operator new のオーバーロード

#4

投稿記事 by hoge » 13年前

もう解決したみたいだけど
#define new new(_T(__FILE__), _T(__FUNCTION__), __LINE__)
でいけるはず。

Blue

Re: operator new のオーバーロード

#5

投稿記事 by Blue » 13年前

__FILE__はconst char* じゃなくて文字列リテラルを返すんですね。
間違ってました。

えぴさんの
http://blogs.wankuma.com/episteme/archi ... 41624.aspx
も参考にしてみては。

閉鎖

“C言語何でも質問掲示板” へ戻る