1、string判断空的方法
判空方法一共三种:str.empty(),str.size() == 0,str == ""。其中str.empty()为效率最高的。注意不能使用str == NULL判断,NULL一般为判断指针类型,如果str == NULL;说明str仅仅为引用,并没有分配内存。
2、unsigned char和char的区别
在内存大小上无差别都是占用一个字节,知识最高位不同,char最高位为符号位,unsigned char最高位不是符号位。最主要的区别还是在进行类型转换时候,char类型转换成int 或者 long类型时候系统会检查符号位进行扩展,但是unsigned char时候不会扩展。
3、string比较的方法
string的比较是按照ASCII码进行比较,C++中提供了compare方法,str1.compare(str2)比较str1和str2是否相等。
4、智能指针
auto_ptr是早期版本的智能指针,采取管理权限转移思想,保证只有一个对象指向一个内存,即原对象拷贝给新对象时候,原对象被设置为NULL,此时只有新对象指向一块资源空间。由于原对象被指向NULL,所以使用了auto_ptr的拷贝构造函数或者赋值运算符重载后,就不能再使用原对象,否则程序出错。
unique_ptr是C++11引入,由于auto_ptr存在上述问题,unique_ptr禁止了拷贝构造函数和赋值运算符重载,以此方法避免上述问题,这样就不存在多个对象指向同一个资源空间。
share_ptr是C++11版本库的智能指针,允许多个智能指针可以指向同一个资源。采用引用计数的思想。内部在堆上维护一个引用计数,记录资源被几个对象共享,当一个对象被销毁,计数减一,为0时候释放资源。由于在堆上,当多线程条件下时候,需要进行加锁保证线程安全,但是*无法进行加锁。如果直接访问资源的内容,没有任何线程同步措施,所以share_ptr线程不安全。share_ptr还是存在内存泄漏情况,比如循环引用,由于相互束缚,都不会使计数为0,资源无法释放。
weak_ptr对象指向share_ptr对象,不会增加引用计数,解决循环引用问题。