2

std::list に push_back を実行した後、オブジェクトが変更されたようです。

これは、push_back の前のオブジェクトです。 push_back の前のオブジェクト

有効な m_parent_reference ポインターの後、最終的に nullptr になり、チェーンが終了する方法を確認してください。

これは、私のオブジェクトが push_back() 後にどのように見えるかです push_back 後のオブジェクト

これで nullptr はなくなりました。代わりに、1 つの parent_reference がその子を参照し、終わりのないループを作成します。

  1. m_InterchangeListタイプですstd::list<CKerEDIInterchange>
  2. m_parent_referenceタイプですCKerEDIReference
  3. CKerEDIInterchangeから継承CKerEDIReference
  4. カスタム コピー コンストラクターCKerEDIInterchangeもありませんCKerEDIReference
  5. Visual Studio 2010 SP1 および Visual Studio 2012 Update 2 でこの動作をテストしました。
  6. 変数 m_parent_reference は、コンストラクターを介してのみ設定できます
           CKerEDIReference(const CKerEDIReference* const parent_reference = NULL)
            : m_parent_reference(parent_reference) {};
    

カスタム コピー コンストラクターと割り当て演算子を使用すると、次のことがわかります。

  1. 代入演算子は呼び出されません
  2. `CKerEDIReference::CKerEDIReference(const CKerEDIReference&) に指定された参照は、この終わりのないループが既に存在するため、既に壊れています。

編集 詳細情報:

  1. 呼び出し{CKerEDIInterchange tmp(nInterchange);}によってオブジェクトが破損することはありません。
  2. スライスは含まれません。m_InterchangeList は of型でtype std::list<CKerEDIInterchange>、nInterchange 型の場合は CKerEDIInterchange

誰かが次にどこを見るべきかのヒントを教えてくれるかどうか本当に知りたい.

前もって感謝します、ニック・パパジョルジオ

4

1 に答える 1