• Q_DISABLE_COPY


    QObject 中没有提供一个拷贝构造函数和赋值操作符给外界使用,其实拷贝构造和赋值的操作都是已经声明了的,但是它们被使用了Q_DISABLE_COPY() 宏放在了private区域。因此所有继承自QObject的类都使用这个宏声明了他们的拷贝构造函数和赋值操作符为私有。

    为什么要这样做?

    我们都知道Qt对标准C++增加了一些功能:signals, slots, object properties, events, event filters, string translation, timers,object trees, guarded pointers, dynamic cast.

    新加入的这些功能就要求我们把每一个QObject的对象看做是唯一(identities)的。唯一的意思就是不能通过拷贝或者赋值操作

    制作出一个一模一样的复制体。

    试想如果我们有一个QPushButton对象btnSubmit,如果我们可以复制出一个和btnSubmint完全一样的button对象,那么新的button对象的名字应该是什么?如果也叫btnSubmit,当我们给其中的btnSubmit接收事件或发出信号时,系统如何区分把事件由哪个button对象接收,或者哪个对象发送了信号?

    我们知道在各种容器中能以value方式存放的类型,必须有默认的构造函数,拷贝构造函数和赋值操作。由于QObject及所有继承自它的子类都没有提供拷贝构造和赋值操作,当我们使用QList<QObject>时,编译器就会报错。如果我们要在容器中存储这中类型的对象,我们就要使用它们的指针。如QList<QObject *>

    from:http://wan-2004.iteye.com/blog/1134186

  • 相关阅读:
    Python面向对象编程——什么是面向对象的程序设计
    Python面向对象编程——基本语法
    Python面向对象编程——简介
    Python函数编程——迭代器
    Python函数编程——列表生成式和生成器
    Python函数编程——闭包和装饰器
    Python函数编程——名称空间
    开始写游戏 --- 第二十七篇
    开始写游戏 --- 第二十六篇
    开始写游戏 --- 第二十五篇
  • 原文地址:https://www.cnblogs.com/senior-engineer/p/6196935.html
Copyright © 2020-2023  润新知