Effective c++
文章平均质量分 79
阅读此书后记录的要点
学代码的章北海
这个作者很懒,什么都没留下…
展开
-
条例26~31(实现)
尽可能延后变量定义式的出现,这样做能增加效率和可读性尽量避免转型,注重效率时尤其避免dynamic转型若转型是必要的应将其隐藏在函数背后,而不用手动调用尽量使用新式的类型转型避免返回引用,指针,迭代器,指向对象内部。这样能增加封装性,避免虚调的发生异常安全函数即使发生异常也不会泄漏资源或者允许任何数据结构破坏,通常有三种类型的保证:基本型,强烈性,不抛异常性。强烈保证往往能够以拷贝复制实现,但强烈保证并非对所有函数都具备可实现意义。原创 2023-10-14 21:02:14 · 320 阅读 · 0 评论 -
条例24~25(设计与声明)
如果需要为某个函数的所有参数,包括被this指针所指向的隐含参数,进行类型转换,则需要把它实现成非成员函数。当stl的swap效率不高时,提供一个swap成员函数并保证其不抛出异常用类外成员函数调用类内成员的swap,若实现的是类,则特化标准库的swap在调用的时候针对swap使用using声明不能在stl内添加全新的东西。原创 2023-10-11 18:51:12 · 95 阅读 · 0 评论 -
条例18~23(设计与声明)
好的接口很容易被正常使用,不容易被误用。应该在所有接口努力达成这些性质促进正确使用的办法包括接口的一致性,以及与内置行为兼容阻止误用的办法包括建立新类型,限制操作,消除客户的资源管理责任,束缚对象值使用share_ptr的定制删除器用来防范dll问题,还可以用来自动解除互斥锁。尽量以const的引用替换传值拷贝,前者比较高效,并可避免切割问题。以上规则不适用于内置类型,以及stl的迭代器和函数对象。对这些而言使用传值拷贝更加恰当。原创 2023-09-26 19:52:12 · 68 阅读 · 0 评论 -
条例13~17(资源管理)
为了防止资源泄漏,需要使用raii对象,他们在构造函数中获得资源,并在析构函数中释放资源常用的智能指针是shared和auto,前者效果更佳。复制raii对象必须一并复制它所管理的资源,所以资源的拷贝行为决定了raii的拷贝行为。常见的raii行为禁止拷贝,实行引用计数。每个RAII对象都应该提供一个取得其管理资源的方法。对原始资源的调用可以通过显示调用或者隐式调用。通常显示调用更加安全。若使用new[]则必须使用delete[],反之同理。原创 2023-09-24 20:24:11 · 90 阅读 · 0 评论 -
条例11~12(构造/析构/赋值函数)
应当确保赋值操作有良好的行为。确保自己赋值时行为仍然正确。拷贝函数应该保证赋值对象内所有成员变量,以及所有父类成员的成分(调用父类成员的拷贝函数)不要尝试在拷贝构造和拷贝赋值之间相互复用,应该向共同技能放在第三方函数内,用两个函数共同调用。原创 2023-09-20 20:40:59 · 55 阅读 · 0 评论 -
条例6~10(构造/析构/赋值函数)
若不想使用编译器自动生成的成员函数,可以通过只声明不实现,或者将拷贝函数作为父类并私有化带有多态性质的父类应该声明虚析构函数,若类内有任意一个虚函数,则析构函数也应该为虚函数若类的设计不是作为父类使用,或不是为了多态,则不需要虚析构函数析构函数不能吐出异常,只能吞下或者结束进程若客户要对某个操作函数进行异常捕捉,应该在不同函数内执行。在构造函数和析构函数内不要调用虚函数,因为这种调用不会下降到子类对象令赋值操作符返回一个this*的引用。原创 2023-09-20 00:26:46 · 51 阅读 · 0 评论 -
条例1~5(构造/析构/赋值函数)
对于单纯的常量,最好用const 或enums 替换宏对于函数,最好用内联替换宏若条件允许,可以用non const 函数复用const函数编译器强制实施 bitwise constness函数尽量声明为const 可以帮助编译器检查出错误用法内置对象都要手动初始化,编译器不会保证会自动初始化最好使用初始化列表初始化,同时初始化列表的排列顺序最好的声明顺序一致多文件编译最好用静态变量替换局部静态变量,这样能确保初始化顺序编译器可以暗自生成构造,析构,拷贝,赋值等成员函数。原创 2023-09-15 21:40:09 · 51 阅读 · 0 评论