总结一些简单面试问题-C++

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对象,不会增加引用计数,解决循环引用问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值