0

オブジェクトが別のスレッドの無限 while ループでスタックしているときに、オブジェクトでデストラクタが呼び出されるとどうなるかを知りたいです。

// Main thread creates the object
MyClass _obj = new MyClass():
// doing some stuff
delete _obj;

どこ、

MyClass::MyClass()
{
 // Start a thread which calls MyClass::MyPollingFn()
}

MyClass:: MyPollingFn()
{
  // runs in new child thread
  while(true)
  {
    // doing some work
    // sleep(5 seconds)
  }
}

説明: スレッドを作成し、無限ループで MyPollingFn メソッドを実行する MyClass のクラス オブジェクトがあります。このメソッドを繰り返すたびに、一部のクラス変数が変更される可能性があります。オブジェクトを保持している親スレッドからオブジェクトを破棄してもよろしいですか? これが問題になる可能性はありますか?

4

2 に答える 2

1

明示的または暗黙的に (たとえば、非静的メンバー変数にアクセスすることによって) にMyPollingFn触れると、このコードは未定義の動作を示し、ダングリング ポインターになります。thisthis

触れないのならthis、なぜそれを非静的メンバー関数にするのですか?

于 2013-08-07T23:50:04.777 に答える