网易笔试问答:智能指针与inline关键字

这次是第一次笔试,被深深打击了,特将问答题重新整理一番,与诸君共勉;

inline函数;特点,优缺点,在编译期间如何处理

特点:

  • inline是一种以空间换时间的做法,省去调用函数的额外开销,所以代码很长或者有递归循环的函数不适合使用
  • inline对于编译器使用只是一个建议,编译器会自动优化,如果定义位inline的函数体内有函数/递归,就不会被调用
  • inline修饰的函数不能让定义和声明分离,分离会导致连接错误,因为inline被展开时就没有函数地址了,连接就找不到了;

优点

  • 减少函数调用所产生的系统开销

缺点

  • 会造成代码膨胀;
  • 当inline函数发生了改变,需要重新编译一遍才可以使用;
  • 与部分调试器不兼容

在编译期间如何处理

  • 在编译阶段C++编译器会在调用内联函数的地方展开;
智能指针如何实现,种类有哪些,在什么场景下用哪个
  • 智能指针的种类:auto_ptr,unique_ptr,shared_ptr,weak_ptr
  • 使用场景:
    • auto_ptr:C98版本中出现,时单个对象独占资源,但因为并不安全,会造成野指针,所以基本不使用
    • unique_ptr:C++11引入,是为了替代auto_ptr的,也是在单个对象使用资源的场景下使用,相较于auto_ptr,它可以作为容器中的元素,管理动态数组,自定义删除操作
    • shared_ptr:C++11引入,为了解决前两者无法实现的,资源多对象共享的问题,也是在这种场景下使用
    • weak_ptr:C++11引入,为了解决shared_ptr的循环引用问题而存在的一种辅助智能指针,重载operator*和->
  • 智能指针如何实现:
    RAII(资源可以自动释放)+operator*/operator->(当成指针使用)+解决浅拷贝的问题
    • RAII:将资源使用类的方式进行封装:在对象构造时获取资源,在析构函数中清理资源
    • 浅拷贝的后果:多个对象共享同一份资源,在销毁对象时,同一份资源被释放多次导致代码崩溃
      auto_ptr: 通过资源转移/资源所有者权限避免浅拷贝
      unique_ptr:通过禁止拷贝构造和赋值运算符重载来避免浅拷贝;
      shared_ptr: 通过资源计数器的方式避免浅拷贝和野指针;

关于智能指针的更多内容,参看我的博客:C++:智能指针

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值