掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
Placement-Newを使用した機構でコンパイラの警告が気になります (ID:55643)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
Win2k VC6.0 コンソールアプリケーション この環境でPlacement-Newを使ったコードをコンパイルすると warning C4291: 'void *__cdecl CBase::operator new(unsigned int,void *)' : 初期化コードが例外をスローすると、'new' 演算子を使用していると メモリを解放しません。 上記のエラーを吐き出します。実行もできてメモリリークも起きて居らず 、それにcountUp関数で変数を思い通りにカウントアップさせることが出来 ました。ですので無視しようとも思いましたが、やはり警告は警告ですので 原因もわからぬまま先へは進みたくありません。 よろしければ「なぜこのような警告が出るのか?」を知りたいのですが 調べた限りの文献、資料の範疇ではありませんでした。 それと、内容に不十分な部位がありましたらお訊き下さい。 助力していただきますことを願っております、宜しくお願いいたします。 /////////////////////////////////////////////////////////////// // 定義部分 #include <windows.h> #include <iostream.h> typedef class CBase * pCBase; class CBase { protected: DWORD m_dwCount; public: DWORD getCount ( void ) { return m_dwCount; } virtual void countUp ( void ) { } PVOID operator new ( size_t uSize ) { return ::operator new ( uSize ); } void operator delete ( PVOID lpvAddr ) { delete lpvAddr; } PVOID operator new ( size_t uSize, PVOID lpvAddr ) { return lpvAddr; } void operator delete ( PVOID lpvAddr, size_t uSize ) { delete lpvAddr; } }; class CInitialize : public CBase { public: CInitialize() { m_dwCount = 0; } void countUp ( void ) { m_dwCount += 1; } }; class CCountUp2 : public CBase { void countUp ( void ) { m_dwCount += 2; } }; /////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////// // 呼び出し部分 pCBase base = new CInitialize; base->countUp(); base = new ( base ) CCountUp2; base->countUp(); cout << "Count : " << base->getCount() << endl; delete base; ///////////////////////////////////////////////////////////////
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.