私はC++を初めて使い、auto_ptrに関してちょっと混乱しました。自動ポインタの問題
内部に静的なauto_ptrがあるクラスがあります。
static std::auto_ptr<MyCompany::CConnection> con = std::auto_ptr<MyCompany::CConnection> (util::getDBConnection());
Utilの:: getDBConnection()の実装:
CConnection* util::getDBConnection(){
try
{
cout<< &MyCompany::GetFermatConnection();
return &MyCompany::GetFermatConnection();
}
catch(...)
{
//connect to local DB
throw;
}
}
私のプログラムが終了したときにしかし、それは常に自動ポインタのデストラクタの間に、メモリ内の例外をヒット。
~auto_ptr()
{ // destroy the object
if (_Myptr != 0)
delete _Myptr; // exception in this line.
}
例外は "TestDLL.exeに0x00000001800024e8で未処理の例外:0xc0000005で:アクセス違反読み取り位置0xffffffffffffffff" です。
私は、auto_ptrがスコープの終わりに達するとメモリを解放しようとすることを理解します。 しかし、この場合、私は何がうまくいかないのか分かりません。考えられる原因は誰か知っていますか?
'auto_ptr'は正しく初期化されていますか?あなたは 'util :: getDBConnection()'にブレークポイントを入れて、それが何を返すのを見ることができますか? – Naveen
'util :: getDBConnection()'はanychanceによって-1を返しますか? –
ブレークポイントは、util.getDBConnectionが0000000002899A20を返すことを示します。 – Rudy