C++ 关于运行时 和 编译时 的问题
C++ 所说的编译时期确定 和 运行时期确定 我该怎么理解 ,
继承的静态类型 和 动态类型还挺好理解的 , 静态类型编译时期确定 , 动态类型运行时确定 。
而到了 关于 unique_ptr 和 shared_ptr 的讲解的时候 , shared_ptr 通过第二个参数传入自定义的删除调用对象的 , 说是运行时的时候才会跳转到指定的代码运行 ,
而unqiue_ptr 使用的是模板参数 , 虽然类型是在编译时期确定 , 但是也需要传入的第二个参数是个调用对象 , 不也是需要运行时才会跳转到指定的代码运行么 ,
primer里面为什么说 shared_ptr 是运行时 , 而unqiue 是编译的时候呢 ?
我发现primer到了16章往后走都很难了 , 前面感觉还没有什么难度。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
主要原因就是
unique_ptr
比shared_ptr
更轻,没有运行时负担,所以unique_ptr
的删除器是编译期确定的。两个
unique_ptr
即使指向类型相同,若删除器不同,也属于不同类型。unique_ptr
的删除器已经内植于类型,所以不需要存储一个删除器对象就知道删除器在哪。“类型内植”过程是编译期确定的,删除过程的代码的运行当然是运行期运行的。shared_ptr
就不同,构造函数传进来一个实实在在的对象,它存储起来用。“对象存储”过程是运行期确定的,删除过程的代码的运行当然也是运行期运行的。shared_ptr
的灵活性更高。定义有什么本质区别么??