虽然已经有人问过为什么Qt的容器类不允许可移动但非可复制的元素类型,但我还是想再问一次。我看过了QtCore维护者Thiago的言论,他在链接的Stackoverflow问题的答案中提到:
永远不会实现。由于隐式共享,可复制性是强制要求。
我不理解这个说法:我理解可复制性是隐式共享的强制要求,但为什么对于一个非可复制的QList<T>
来说,隐式共享是必须的?
QList
已经具备移动构造函数和移动赋值运算符,因此我们可以假设从另一个临时QList<T>
构造一个QList<T>
将不会应用隐式共享,而是移动基础的d指针。在只复制/赋值临时/右值QList
的情况下,什么情况下会出现隐式共享?