QSharedData和运营商=

QSharedData和运营商=

问题描述:

最近,我想要实现的隐式共享功能类似的Qt其QSharedDataQSharedDataPointer类呢,所以我在他们的来源看了看,在QSharedData的地方,我发现这三条线: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; } 

QSharedData的全部用途是保持引用计数。如果您将其中一个分配给另一个,那么每边的引用计数会发生什么?正如你已经正确确定:什么都没有。将一个QSharedData分配给另一个是没有意义的,因此明智的做法是在编译时防止它。

+0

感谢您的回答,这基本上是我的想法,我只想要 它确认没有任何隐藏的捕获。 – jcxz 2013-03-13 10:19:15

没有这将是一件坏事,如果是做引用计数需要做簿记,只是让它返回this将意味着有副本的QSharedData下载。这个example from the C++faq基本上显示了参考计数对象中的operator =需要什么样的记录。

+1

感谢您的回答,对不起回复迟到,我正在阅读您链接的常见问题 (您对此有赞成)。 我的观点是,正如Dan也提到的那样,'QSharedData'基本上是一个基类, 它禁用了赋值运算符,但是这并不妨碍继承类 定义它自己的'operator =',这反过来意味着我们只想防止 引用计数被复制。这就是我想确认的, 没有什么意外的事情发生。 – jcxz 2013-03-13 10:18:59