6

関数ヒープの破損から返された void ポインターに似た問題に直面しています

類似点は、unique_ptr が使用されているスコープを離れるときに「ヒープの破損」メッセージが表示されることです。

ここにコード:

void CMyClass::SomeMethod ()
{
  std::unique_ptr<IMyInterface> spMyInterface;
  spMyInterface.reset(new CMyInterfaceObject()); // CMyInterfaceObject is derived from IMyInterface

  any_list.push_back(spMyInterface.get()); // any_list: std::list<IMyInterface*>

  any_list.clear(); // only clears the pointers, but doesn't delete it

  // when leaving the scope, unique_ptr deletes the allocated objects... -> heap corruption
}

なぜこれが起こるのか分かりますか?

4

1 に答える 1

4

std::unique_ptr は、ポインターを介してオブジェクトの唯一の所有権を保持し、unique_ptr がスコープ外になるとそのオブジェクトを破棄するスマート ポインターです。

あなたの場合、std::unique_ptr<IMyInterface> spMyInterface;SomeMethod() 内で宣言したので、実行が SomeMethod() のスコープを離れるとすぐに、オブジェクトが破棄されます。

unique_ptrを見てください

于 2013-07-03T12:16:58.170 に答える