C++ 关于运行时 和 编译时 的问题

发布于 2022-09-07 23:02:27 字数 385 浏览 36 评论 0

C++ 所说的编译时期确定 和 运行时期确定 我该怎么理解 ,
继承的静态类型 和 动态类型还挺好理解的 , 静态类型编译时期确定 , 动态类型运行时确定 。
而到了 关于 unique_ptr 和 shared_ptr 的讲解的时候 , shared_ptr 通过第二个参数传入自定义的删除调用对象的 , 说是运行时的时候才会跳转到指定的代码运行 ,
而unqiue_ptr 使用的是模板参数 , 虽然类型是在编译时期确定 , 但是也需要传入的第二个参数是个调用对象 , 不也是需要运行时才会跳转到指定的代码运行么 ,
primer里面为什么说 shared_ptr 是运行时 , 而unqiue 是编译的时候呢 ?

我发现primer到了16章往后走都很难了 , 前面感觉还没有什么难度。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

↙厌世 2022-09-14 23:02:27

主要原因就是unique_ptrshared_ptr更轻,没有运行时负担,所以unique_ptr的删除器是编译期确定的。

两个unique_ptr即使指向类型相同,若删除器不同,也属于不同类型。unique_ptr的删除器已经内植于类型,所以不需要存储一个删除器对象就知道删除器在哪。“类型内植”过程是编译期确定的,删除过程的代码的运行当然是运行期运行的。

shared_ptr就不同,构造函数传进来一个实实在在的对象,它存储起来用。“对象存储”过程是运行期确定的,删除过程的代码的运行当然也是运行期运行的。shared_ptr的灵活性更高。

半葬歌 2022-09-14 23:02:27

定义有什么本质区别么??

template< class Y, class Deleter > 
shared_ptr( Y* ptr, Deleter d );

template<
    class T,
    class Deleter = std::default_delete<T>
> class unique_ptr;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文