后端c++知识点总结

这篇博客总结了C++的面试重点,包括虚函数的作用和实现原理、类大小的计算、指针与引用的区别、构造与析构顺序、STL容器实现原理、extern C的作用、volatile关键字的用途以及static const的用法。详细解释了每个知识点,帮助读者深入理解C++的核心概念。
摘要由CSDN通过智能技术生成

这一篇是C++的一些面试点的总结。

1、一个String类的完整实现必须很快速写出来(注意:赋值构造,operator=是关键)
  如果对C++String不熟悉的话,先看http://www.cplusplus.com/reference/去了解一下String类常用的方法,如果想了解C语言的实现,去看一下《C语言接口与实现》(十五章 低级字符串)。
  Scott Meyers在《effecive STL》中提到了std::string有多种实现方式。
  总结起来有三类(代码来源《Linux多线程服务端编程》):
  
  1. 无特殊处理,使用类似std::vector的数据结构。start到end之间存储数据,start到end_of_storage之间是容量大小,这样能减少扩容时数据复制的概率。后面两个成员变量还可以使用整数代替,如果字符串大小有限,可以使用u32等来表示end和end_of_storage,减小对象的大小。

class string{
    public:
        iterator begin()  { return start; }
        iterator end()    { return end;   }
    private:
        char* start;
        char* end;
        char* end_of_storage;   
};

  2. Copy-on-Write。对象里只放一个指针。
  

class string{
   
    struct Rep{
        size_t size;
        size_t capacity;
        size_t refcount;
        char* data[1];
    };
    char* start;
};

  3.短字符优化,利用字符串对象本身的空间存储短字符串,通常阈值是15字节。当定义比较短的字符串对象时,不需要再次申请分配内存。
  

class string{
    char* start;
    size_t size;
    static const int kLocalSize = 15;
    union{
        char buffer[kLocalSize+1];
        size_t capacity;
    }data;
};

这里给出关键的赋值函数

/*
如下为CMyString的声明,请为该类型添加赋值运算符 
*/
#include<iostream>
#include<string.h>
class CMyString{
    public:
        CMyString(char *m_pData=NULL);
        CMyString(const CMyString& str);
        ~CMyString(void);
        CMyString& operator=(const CMyString& rhs);
    private: 
        char * m_pData;
};
/*
    考察几个知识点:
    1.返回值类型为  X& 解决连续赋值时的左值问题
    2.使用const &提高效率,避免传参数时的拷贝构造
    3.在赋值和拷贝构造函数中,应该先释放原对象空间,重新申请,
    避免两个指针指向同一内存,浅拷贝问题,避免内存泄漏。
    4.可以使用swap的写法,先构造局部变量,在作用域之外释放掉。
    5.字符串申请空间时。应该+1,为结束符'\0'留位置。
    6.strcpy应该使用更安全的strncpy代替,避免缓冲区溢出。 

*/
CMyString& CMyString::
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值