最近我想实现Qt与其QSharedData
和QSharedDataPointer
类之间的隐式共享功能,因此我查看了它们的来源,并在QSharedData
的位置找到了这些三行:
private:
// using the assignment operator would lead to corruption in the ref-counting
QSharedData &operator=(const QSharedData &);
但是我不明白operator=
如何打破引用计数。
如果我没有将其设为私有并将其实现留空,那么它不会起到同样的作用吗?
即。如果我只写这个:
public:
QSharedData &operator=(const QSharedData & ) { return *this; }
答案 0 :(得分:4)
QSharedData
的全部目的是维持引用计数。如果您将一个分配给另一个,那么每一侧的引用计数会发生什么?正如你已经正确确定的那样:没有。将一个QSharedData
分配给另一个是没有意义的,因此合理的行动方针是在编译时阻止它。
答案 1 :(得分:2)
不,这不是一件坏事,如果它正在进行引用计数,它需要进行簿记,只要让它返回this
就意味着有QSharedData
未列入的副本。这个example from the C++faq基本上显示了operator =
在引用计数对象中需要什么样的簿记。