什么时候深层复制发生在QList上?

Cor*_*ein 11 c++ qt qlist

在我正在上课的课程中,我正在玩几个人QList.我听说Qt试图尽可能不制作列表的深层副本.据我所知,这意味着当你这样做时不会发生深层复制:

QList<int> myList;
myList << 1 << 2 << 3 << 4;
QList<int> otherList = myList;  // No deep copy
Run Code Online (Sandbox Code Playgroud)

在某些情况下,我需要确保永远不会发生深层复制QList.我需要确保避免什么样的操作或操作才能确保QList我正在使用的深层拷贝永远不会发生?

Stu*_*lar 13

QLists使用隐式共享实现.

使用浅拷贝实现隐式共享对象的对象赋值(使用operator =()).

这意味着单独分配永远不会导致包含的数据被复制.但是,写入共享实例导致复制源对象.这种模式通常称为写时复制.

因此,要回答您的问题,如果您从未写过共享实例,那么它们将永远不会被复制.如果要完全阻止复制,则从QList派生并覆盖并隐藏复制构造函数和赋值运算符.