我正在尝试制作一个QList的深拷贝,我正在使用Qt 4.8。在下面的代码中,
起初,我认为下面的代码应该可以工作,但是深入研究Qt的隐式共享(即写时复制)概念后,我开始怀疑这是否是正确的方法。
根据Qt,
QList::QList(const QList & other)
构造一个other的副本。
这个操作花费恒定时间,因为QList是隐式共享的。这使得从函数返回QList非常快。如果修改了共享实例,它将被复制(写时复制),这需要线性时间。
我希望确保如果aData超出范围或者aData的内容被修改,这不会改变mData的内容。是否有可能在不必逐个迭代和复制每个列表条目的情况下实现这一点?
注意:这不是Qt 4.5 - QList::QList(const QList&) - is this a deep copy constructor? 的重复,因为这个问题间接地询问“如何”创建深层副本,而不是“是否”是深层副本。
mData
是Test
类的QList<unsigned char>
成员变量。起初,我认为下面的代码应该可以工作,但是深入研究Qt的隐式共享(即写时复制)概念后,我开始怀疑这是否是正确的方法。
Test::Test(QList<unsigned char> &aData) {
mData.QList(aData);
}
根据Qt,
QList::QList(const QList & other)
构造一个other的副本。
这个操作花费恒定时间,因为QList是隐式共享的。这使得从函数返回QList非常快。如果修改了共享实例,它将被复制(写时复制),这需要线性时间。
我希望确保如果aData超出范围或者aData的内容被修改,这不会改变mData的内容。是否有可能在不必逐个迭代和复制每个列表条目的情况下实现这一点?
注意:这不是Qt 4.5 - QList::QList(const QList&) - is this a deep copy constructor? 的重复,因为这个问题间接地询问“如何”创建深层副本,而不是“是否”是深层副本。