我在学习链表实现的时候了解到 NonNull,练习的时候也只是会写 as_ptr、解引用、NonNull 实现了 Copy 等基本的知识。 NonNull 从字面和文档上可以知道: 1.非空。可以帮助检查指针是否为空 2.协变。方便抽象实现 (读了也还是不懂?!?XD)
请教下大家: 1.这些特性要怎么理解?有哪些应用场景?能解决什么问题?是不是要串起来理解? 2.不理解是否因为基础不扎实,大佬们指导下要补充哪些知识?
1
共 2 条评论, 1 页
评论区
写评论NonNull就跟C++那个引用差不多,就是通过包装原生指针,让其编译的时候通过禁止设置为空,来让某些接受NonNull的接口无需进行判空检查。其实现还是跟原生指针没啥区别,纯粹的编译期限制。说白了就是把允许为Null的那一套指针玩法,转换成Rust使用Option表示空的玩法,从而符合Rust的需求,毕竟Rust是不希望出现Null的,这与语言设计不合。
我的理解就是,NonNull替代不可能为空的指针,Option NonNull替代可能为空的指针。