Поддерживает ли 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);
}

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

2

Решение

Если оператор назначения копирования не определен, то он не определен и не может быть использован. Это верно для 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
4

Другие решения