3

MSVC の CList 定義とMSDNafxtempl.hのドキュメントを調べました。が定義されているのを見ませんでした。CList& operator=(const CList&);

operator=このように CList オブジェクトをコピーするために直接使用できますか?

 CList<int> a = b;

または、ソース CList をターゲット CList との間で手動で繰り返す必要がheadありtailますAddTailか?

 for(POSITION pos = a.HeadPosition(); pos; )
 {
      const auto& item = a.GetNext(pos);
      b.AddTail(item);
 }

どんな提案も役に立ちます。ありがとう。

4

1 に答える 1

4

コピー代入演算子が定義されていない場合は、定義されていないため使用できません。既に観察したように、これは にも当てはまります。オブジェクトをコピーするために をCList使用することはできません。コレクションのディープ コピーが必要な場合は、関数を手動で作成する必要があります。operator=CList

ただし、本当にディープ コピーが必要かどうかを検討してください。ほとんどの場合、値ではなく参照によってコレクション型を渡したいと思うでしょう。CObjectこれは、MFC に特に当てはまります。MFC では、必ずしもコピーできない派生オブジェクトを含めることができます。CObject実際、プライベート コピー コンストラクターと代入演算子を使用して、コピーがクラスによって明示的に禁止されていることに気付くでしょう。

   // Disable the copy constructor and assignment by default so you will get
   //   compiler errors instead of unexpected behaviour if you pass objects
   //   by value or assign objects.
private:
   CObject(const CObject& objectSrc);              // no implementation
   void operator=(const CObject& objectSrc);       // no implementation
于 2014-04-22T04:27:08.820 に答える