Поддерживает ли MFC CList назначение копирования?

Я посмотрел определение CList в MSVC afxtempl.h и документ на MSDN. Я не видел CList& operator=(const CList&); определено.

Могу ли я напрямую использовать operator= скопировать объект CList, как это?

 CList<int> a = b;

Или я должен повторить исходный CList вручную из head в tail а также AddTail на целевой CList?

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

Любые предложения будут полезны. Благодарю.

1 ответ

Решение

Если оператор назначения копирования не определен, то он не определен и не может быть использован. Это верно для CList, как вы уже заметили, так что нет, вы не можете просто использовать operator= скопировать CList объект. Если вам нужна глубокая копия коллекции, вам нужно написать функцию, чтобы сделать это вручную.

Но подумайте, действительно ли вы хотите глубокую копию. В большинстве случаев вам нужно передавать типы коллекций по ссылкам, а не по значению. Это особенно верно в MFC, где они могут содержать объекты, полученные из CObject это не обязательно может быть скопировано. На самом деле, вы заметите, что копирование явно запрещено 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
Другие вопросы по тегам