
More Effective C++
文章平均质量分 69
小丑快学习
这个作者很懒,什么都没留下…
展开
-
C++ 继承、多态关系中的赋值运算符的重载、=operator()
文章目录1.异形赋值2.dynamic_cast解决异形赋值问题3.抽象基类解决异形赋值问题1.异形赋值操作符的重载是非常有用也是非常常见的,但是当涉及到继承和多态时情况可能就比较复杂了。对于多态,则一般都会涉及到虚函数重载,而我们在继承体系中如果重载赋值运算符则需要考虑对父类的赋值。假设有如下的继承体系:Animal是Dog和Cat的父类,则我,我们可以写出如下所示的代码:class Animal {public: Animal(std::string name_ = "animal原创 2021-06-13 17:26:56 · 1898 阅读 · 0 评论 -
C++ String的引用计数、写时复制 的实现 《More Effective C++》
文章目录1.引用计数2.写时复制1.引用计数c++引用计数的可以节省内存,而且同时可以降低构建对象和析构的开销,所谓引用计数简单说来就是对各对象共享一份实体的数据,但是我们需要实现对该数据的引用的对象的记录,这样最后一个对象引用结束后能够安全的删除数据。用字符串举例,假设我们想要实现字符串的拷贝或者赋值,那么我们想要呈现的客户的是各自独立的字符串。如下:但是,对于计算机的内部实现而言,这样的方式显然出现了冗余存储的现象,那么我们期待计算机内部是这样实现的。这样所有的用户拥有的字符串都是同一个,原创 2021-06-10 09:43:04 · 599 阅读 · 1 评论 -
《More Effective C++》尽量提供默认构造函数
如果一个类没有默认构造函数那么他的使用将会有很多的限制,诸如不能使用动态数组存放其对象,以及很多的模板都将不能使用高该函数。这样一个函数,表示某个设备,他不能提供默认构造函数,因为每个设备都必须具有一个设备ID。class EquipmentPiece {pulic: EquipmentPiece(int IDNumber); ... };通常这样的类的对象将不能使用数组存放,因为,对于数组存放的对象可能会调用该类的默认构造函数。EquipmentPiece bestPieces[1原创 2021-04-16 16:11:10 · 116 阅读 · 0 评论 -
《More Effecttive C++》不要用多态来处理数组
一个二叉搜索树的例子:class BST { ... }; class BalancedBST: public BST{...};有这样一个函数,他能打印BST的对象:void printBSTArray(ostream& s, const BST array[], int numElements) { for (int i = 0; i < numElements; ) { s << array[i]; }//假设重载了<<运算符 }原创 2021-04-16 10:38:02 · 159 阅读 · 0 评论