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