QSharedData和operator =

时间:2013-03-13 09:25:46

标签: c++ qt qshareddata

最近我想实现Qt与其QSharedDataQSharedDataPointer类之间的隐式共享功能,因此我查看了它们的来源,并在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; }

2 个答案:

答案 0 :(得分:4)

QSharedData的全部目的是维持引用计数。如果您将一个分配给另一个,那么每一侧的引用计数会发生什么?正如你已经正确确定的那样:没有。将一个QSharedData分配给另一个是没有意义的,因此合理的行动方针是在编译时阻止它。

答案 1 :(得分:2)

不,这不是一件坏事,如果它正在进行引用计数,它需要进行簿记,只要让它返回this就意味着有QSharedData未列入的副本。这个example from the C++faq基本上显示了operator =在引用计数对象中需要什么样的簿记。