最近,我想像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; }发布于 2013-03-13 18:03:18
QSharedData的全部目的是维护引用计数。如果将一个分配给另一个,那么两端的引用计数会发生什么变化?正如您已经正确确定的:什么都没有。将一个QSharedData分配给另一个是没有意义的,因此明智的做法是在编译时阻止它。
发布于 2013-03-13 17:30:24
不,这将是一件坏事,如果它在做引用计数,它需要做记账,仅仅让它返回this就意味着有QSharedData的副本下落不明。此example from the C++faq基本上显示了引用计数对象中的operator =需要哪种记账方式。
https://stackoverflow.com/questions/15381288
复制相似问题