0.Qt和C++从来不冲突,所以C++的技巧Qt同样适用。
1.Qt开发中关于include:查找头文件,通常而言,好的做法是在包含了Qt头文件之后再包含非Qt头文件。由于Qt(为编译器和预处理器)定义了许多符号,这使得避免名称冲突变得更容易,也更容易找到文件。
2.Qt、标准库以及Boost.org中都提供了智能指针,它用来保存和管理指向堆对象的指针。这个类在Qt中对应的是QPointer,在标准库中是std::auto_ptr,在Boost中是shared_ptr。使用其中任何一个类,都可以使C++内存管理变得更轻松且更安全。
3.重载逗号运算符是允许的,但是强烈建议不要这样做,除非你是C++行家。
4.我们可以为内置运算符赋予一种新的含义,这样它就可以使用具有不同类型的操作数。但是,无法改变内置运算符的结合性和优先级。
5.按指针传递还是按引用传递?如果可以选择,则通常更倾向于使用引用而不是指针,因为这样可以降低程序偶然发生内存崩溃的概率。只有在管理那些需要对指针进行操作的对象时(创建、销毁或者添加到一个托管容器中),才会选择使用指针,并且,通常可以将这些例程封装为成员函数。
6.要小心,不要让你的函数返回一个指向局部(临时)变量的引用。这很可能会被不小心忘记。
7.一般而言,如果一个类中包含一个或者多个virtual函数,则也应该包含一个虚析构函数。这是因为,当对多态对象集合进行操作时,通常是通过基类指针删除这些对象,这会导致对析构函数的间接调用。如果析构函数不为virtual类型,则编译时绑定将决定应该调用哪一个析构函数,从而可能导致派生对象的不完整析构。
8.C++初始化的过程按照下面的顺序进行:a.首先是积累的初始化,按照它们在派生类的首部中出现的顺序依次进行;b.数据成员的初始化,按照声明的顺序进行。
9.对于Qt指针容器,可以使用qDeleteAll(container),它是一个对容器中的每一个元素调用delete函数的算法。
10.foreach()宏需要复制它所遍历的容器。如果此时复制构造函数为private类型,那么这种复制操作是不可行的,所以在使用QObject时,一定要记住这一点。
11.即使名称和形参列表相同,但是函数的const和非const变体也是不同的函数。换句话说,我们可以使用const来重载函数。
12.包含纯虚函数的类被称为抽象类,因为我们不能定义包含纯虚函数的类的对象,抽象类存在的唯一用途,就是定义派生类。如果抽象类的派生类将基类的纯虚函数仍然定义为纯虚函数,则该派生类也是抽象类。
13. 在赋予指针另一个地址值之前,我们必须从自由存储器中删除对象。如果不这样做,以后我们将无法清理自由存储器,因为已经失去了原来对象的地址。