首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QSharedData和operator=

QSharedData和operator=
EN

Stack Overflow用户
提问于 2013-03-13 17:25:46
回答 2查看 341关注 0票数 4

最近,我想像Qt一样用QSharedDataQSharedDataPointer类实现隐式共享功能,所以我查看了它们的源代码,并在QSharedData的位置找到了这三行代码:

代码语言:javascript
复制
private:
    // using the assignment operator would lead to corruption in the ref-counting
    QSharedData &operator=(const QSharedData &);

然而,我不明白operator=怎么会破坏引用计数。

如果我不把它设为私有,并让它的实现为空,它不是也有同样的作用吗?

也就是说,如果我简单地写成:

代码语言:javascript
复制
    public:
    QSharedData &operator=(const QSharedData & ) { return *this; }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-13 18:03:18

QSharedData的全部目的是维护引用计数。如果将一个分配给另一个,那么两端的引用计数会发生什么变化?正如您已经正确确定的:什么都没有。将一个QSharedData分配给另一个是没有意义的,因此明智的做法是在编译时阻止它。

票数 4
EN

Stack Overflow用户

发布于 2013-03-13 17:30:24

不,这将是一件坏事,如果它在做引用计数,它需要做记账,仅仅让它返回this就意味着有QSharedData的副本下落不明。此example from the C++faq基本上显示了引用计数对象中的operator =需要哪种记账方式。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15381288

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档