c++
HappyKocola
一个喜欢图形学的弱渣~
展开
-
C++ 简易string类实现(一)
最近在重温C++ Effective系列,在more effective C++中Item28~30涉及一个string类的实现,为了深入地理解,故由简单到复杂实现一个简易的string类,这一篇里,不考虑书中的3个条款,在后续的博客里,逐步将条款的内容加入进来,实现一些相对复杂的特性; string类声明:class String{ friend std::ostream& opera原创 2017-05-16 15:57:21 · 773 阅读 · 0 评论 -
C++ 简易string类实现(二)-引用计数
引用计数(reference count),允许多个等值对象共享一个实值,此技术的发展有两个动机.第一,简化heap object的簿记工作,在程序执行过程中,对象的拥有权可以会转移,记录对象的拥有权不是一件简单的事情,其次,在对象没有使用者时,需要自动销毁自己,避免内存泄露;第二,如果多个对象拥有相同的值,那么将那个值存储多次往往是件愚蠢的事情,最好的做法是,让所有等值对象共享一份实值就好,这么做原创 2017-05-16 22:35:04 · 918 阅读 · 0 评论 -
C++ 简易string类实现(三)-抽离引用计数
在C++ 简易string类实现(二)-引用计数里我们在String类实现里加入了引用计数,从而有效地实现了字符串的共享,降低内存消耗,提升了代码的执行效率.引用计数(RC)不仅可以用于字符串,任何class如果其不同的对象可能拥有相同的值,都适用此技术.然而重写class以便运用引用计数(RC),可能是一个大工程,我们中的大部分人该做的事情还有很多.如果我们能够在一个与外界无任何关联的环境下撰写引原创 2017-05-17 09:08:01 · 463 阅读 · 0 评论 -
C++ 简易string类实现(四)-自动操作引用次数
在 C++ 简易string类实现(三)-抽离引用计数中,RCObject class给了我们一个放置引用次数的空间,也给了我们一些member functions,用来操作引用次数.然而,这些函数的调用动作还是一定得由我们手动式地安插到其它class内.并且还是有劳String copy constructor和String assignment operator调用StringValue对象所提原创 2017-05-17 12:06:51 · 441 阅读 · 0 评论 -
C++ 简易string类实现(六)-真正的写时复制
在C++ 简易string类实现(二)-引用计数中,我们引入了写时复制(copy on write),但因为C++编译期无法告诉我们operator[]是被用于读取或写,出于安全,这里假设对non-const 的operator[]的调用都是写操作,这样虽然能够正常运行,但是诸如下面的代码:String str1 = "123";std::cout << str1[2]; //读操作str1原创 2017-05-18 06:46:56 · 845 阅读 · 0 评论 -
C++ 简易string类实现(五)-进一步抽象
前四篇所叙述的没一件事情,都必须动用到我们感兴趣的那个class的源代码.但如果我们想要将reference counting施行于程序库中一个名为Widget的class呢?程序库的行为不是我们可以更改的,所以没办法让Widget继承自RCObject,也就无法对Widget使用smart RCPtrs.但只要稍微修改设计,我们就可以为任何类型加上reference counting能力.首先,让原创 2017-05-17 21:41:58 · 602 阅读 · 0 评论 -
boost源码剖析之:泛型编程精灵type_traits(rev#2)
boost源码剖析之:泛型编程精灵type_traits(rev#2) 刘未鹏C++的罗浮宫(http://blog.csdn.net/pongba) 动机使用traits的动机一般有三种,分派、效率、使某些代码通过编译。 分派下面有一个模板函数,假设一个动物收容组织提供了它,他们接受所有无家可归的可怜的小动物,于是他们向外界提供了一个函数接受注册。函数看起来像这样: templ转载 2017-05-18 10:20:30 · 376 阅读 · 0 评论 -
std::unordered_map(提供自己的Hash函数和等价准则)
在使用容器std::unordered_map< key, value >时,当key是内置类型或者std::string时,容器都能正常使用,而且由于查找时间为O(1),在编程时,特别适合充当hash_table来使用。如果key是自定义类型时,直接使用std::unordered_map,编译时会报错,错误信息为:”error C2338: The C++ Standard doesn’t pr原创 2017-07-03 15:44:08 · 23782 阅读 · 3 评论 -
模板成员函数为什么不能是虚函数
转载: http://blog.csdn.net/jcwkyl/article/details/3771059《Thinking in C++》volume 2第五章有这么一句话: Member template functions cannot be declared virtual.Current compiler technology experts to be able to deter转载 2017-06-23 19:14:05 · 1018 阅读 · 0 评论