4

最近我想实现隐式共享功能,就像 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; }
4

2 回答 2

4

的全部目的QSharedData是保持引用计数。如果将一个分配给另一个,每一侧的引用计数会发生什么变化?正如您正确确定的那样:没有。将一个分配给另一个根本没有意义QSharedData,因此明智的做法是在编译时阻止它。

于 2013-03-13T10:03:17.890 回答
2

不,这将是一件坏事,如果它正在做引用计数,它需要做簿记并且仅仅让它返回this将意味着有QSharedData下落不明的副本。这个来自 C++faq 的例子operator =基本上显示了在引用计数对象中需要什么样的簿记。

于 2013-03-13T09:30:24.250 回答