QSharedData和运营商=
最近,我想要实现的隐式共享功能类似的Qt其QSharedData
和QSharedDataPointer
类呢,所以我在他们的来源看了看,在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
分配给另一个是没有意义的,因此明智的做法是在编译时防止它。
没有这将是一件坏事,如果是做引用计数需要做簿记,只是让它返回this
将意味着有副本的QSharedData
下载。这个example from the C++faq基本上显示了参考计数对象中的operator =
需要什么样的记录。
感谢您的回答,对不起回复迟到,我正在阅读您链接的常见问题 (您对此有赞成)。 我的观点是,正如Dan也提到的那样,'QSharedData'基本上是一个基类, 它禁用了赋值运算符,但是这并不妨碍继承类 定义它自己的'operator =',这反过来意味着我们只想防止 引用计数被复制。这就是我想确认的, 没有什么意外的事情发生。 – jcxz 2013-03-13 10:18:59
感谢您的回答,这基本上是我的想法,我只想要 它确认没有任何隐藏的捕获。 – jcxz 2013-03-13 10:19:15