[c++实践]关于标准库中字符串的高效处理 无论什么程序,都需要大量的使用字符串,c++标准库提供了 std::string 对字符串进行处理。熟悉 std::string 实现逻辑的都知道,std::string 库比较耗时的操作主要在内存的分配与字符串的拼接。因为内存分配实际上还是使用的 malloc ,但是在多线程环境下调用该函数会有一个全局的锁,如果频繁的调用该函数会导致性能的严重下降。而
从c转向c++条款
第六章 继承和面向对象设计条款35: 使公有继承体现 “是一个” 的含义 1.子类对象一定“是一个”基类对象,基类对象不一定是子类对象 条款36: 区分接口继承和实现继承 1.希望派生类只继承成员函数的接口——将函数声明为纯虚函数 2.希望派生类同时继承函数的接口和实现,但允许派生类改写实现——将函数声明为虚函数 3.希望同时继承接口和实现,并且不允许派生类改写任何东
第一章:效率Item M19:理解临时对象的来源 1.C++临时变量指的是匿名变量,匿名变量带来了构造和析构的开销 2.如果要返回一个对象,最好不要返回局部变量,它会带来两次的构造和一次的析构,可以通过调用构造函数构造一个匿名变量进行返回Item M21:通过重载避免隐式类型转换 1.通过单参构造函数可以隐式的将其参数转换为该类的对象,此时会发生构造的开销,为避免这种隐式转换
条款1:仔细选择你的容器常见容器:标准STL序列容器:vector、string、deque和list标准STL关联容器:set、multiset、map和multimap非标准序列容器:slist和rope非标准关联容器:hash_set、hash_multiset、hash_map和hash_multimap标准非STL容器:bitset、valarray、stack、queue和pri
条款13:尽量使用vector和string来代替动态分配的数组理由如下:通过vector、string代替动态分配的数组,你可以享受标准stl算法库的好处你不需要考虑何时放内存,不会存在麻烦的内存泄露问题你不需要考虑到底是用delete还是delete[],也不需要顾虑资源重复释放的问题使用容器代替动态分配的数组可能在以下2个地方存在问题:由于STL实现的string可能存在引用计数,在
条款19:了解相等和等价的区别相等:一般表示operator==操作符返回true 等价:一般用于关联容器,表示两个对象x和y如果在关联容器c的排序顺序中没有哪个排在另一个之前,一般以Operator<实现,如过x和y是关联容器c,其比较函数为key_comp,则表示x和y等价的表达式如下:!c.key_comp()(x, y) && !c.key_comp()(y, x);//在c的排序顺序中如
条款26:尽量用iterator代替const_iterator,reverse_iterator和const_reverse_iterator1.四个迭代器的转换关系iterator可以转换为其他三个迭代器,const的迭代器之间可以相互转换,但const的迭代器不能转换为非const的迭代器反向迭代器可以通过调用base来获取对应的正向迭代器2.尽量使用iterator的理由insert和e
条款30:确保目标区间足够大STL容器在被添加时(通过insert、push_front、push_back等)自动扩展它们自己来容纳新对象。但是标准STL并不总是为你进行区间的扩充——当你是用了错误的迭代器时,下面这段代码存在致命的错误:int transmogrify(int x); // 这个函数从x// 产生一些新值vector<int> values;... // 把数据放入valu
条款11: 为需要动态分配内存的类声明一个拷贝构造函数和一个赋值操作符为动态内存分配的类提供拷贝构造与赋值操作符,以避免使用缺省的拷贝构造与缺省赋值操作时由于类的成员变量间的内存拷贝造成程序crash。 拷贝构造函数和赋值运算符,官方的规则是:缺省拷贝构造函数(赋值运算符)对类的非静态数据成员进行 “以成员为单位的” 逐一拷贝构造(赋值)。即,如果m是类C中类型为T的非静态数据成员,并且C没有声
引用计数的特点及作用 1. 引用计数允许多个相同值得对象共享这个值得实现 2. 引用计数可以节省空间、拷贝及析构的开销 3. 引用计数可以简化对象的追踪过程,比如在垃圾体系回收中引用计数的简单实现
more effective c++——Item M29 引用计数(一)简略的rfstring类设计和写时拷贝 这篇博客中所实现的引用计数还存在未解决的问题——如何通过相同的值多次构造rfstring对象时,防止多次在堆上分配内存?可以通过在rfstring类中添加一个static list
带引用计数的基类实现:Cstring类的实现与通过增加中间层来为不可修改源代码的实现引用计数功能
代理类:用一个类来实现我们所需要的而 C++语言中并没有提供的东西,用户并不需要该类的具体实现总结: 1.模板类中,输入输出操作符重载不能在模板类外部实现 2.数组类需要提供基本的操作:单参构造,拷贝构造,赋值操作,输出操作符 3.n维数组类持有n-1维数组的二级指针 4.多维数组可以看作n-1维数组的叠加,构造时需要先构造row个n-1个维数组的指针,然后再
通过代理类延后对引用计数类string的下标索引返回值得操作,识别operator[]的读写操作
代理类的缺点: 1.作为函数返回值,代理类的临时对象(比如proxychar)会带来构造与析构的开销 2.代理类存在类型转换的问题,如果原始类A可以隐式转换为类B,则代理类即使存在隐式转换为A的方法,也不能直接转换为B 3.如果要像操作原始类一样操作代理类,则必须为代理类提供相同的接口根据第二点的特性,我们可以设计一个转换的代理类来防止隐式类型(另一种方式是将单参构造函
第一章:基础议题 Item M1:指针与引用的区别 1.指针可以不初始化,引用必须初始化 2.指针可以为空指针,引用不可以为空 3.指针可以改变指向,引用初始化后就不能改变指向的对象 4.指针占用4个字节,引用只是别名,理论上是不占用空间的,但是这个别名本身是要占用空间的,因此也可以说引用时占用空间的 5.引用比指针效率高,因为引用直接操作
C++的多态实现了“一种接口,多种方法”,即当给一个对象发送一个通用的信号时,该对象能够调用正确的方法来响应。多态可以引用多个类的实例,医用多态,程序员可以给一个对象发送消息来完成一系列操作,而不用关心软件系统在系统设计阶段是如何实现这些操作的。多态的三个基本条件: 1.由一个类继承的层次结构 2.在类中定义虚函数 3.指向对象的指针或引用 函数的静态绑定和动态绑定:#includeusi
Copyright © 2005-2024 51CTO.COM 版权所有 京ICP证060544号