美文网首页
C++ value, reference, pointer, *

C++ value, reference, pointer, *

作者: 尚无花名 | 来源:发表于2019-09-30 04:49 被阅读0次

    简书网站暂停一个月,很搞
    话说笔者被C++的这几个东西搞得很方,特地来整理一下。
    value这个简单
    reference 和pointer这两个要注意,他们不是一回事。不是说Java里的reference在C++叫pointer,完全不是这样子。
    C++里的Reference不可以是null, 所以不用check reference. Reference不能被reassign
    C++ 对Class object在声名变量的时候会直接初始化, 所以只要有变量名或者reference在,就肯定不会是null的。
    C++的Reference好像是C++ 11之后才加进来的? 之前一直是只有pointer没有reference.

    但是pointer可能是null 所以在有需要的时候是要check的。
    std::<shared_ptr>
    Do i need to check an object is null?

    Shared_ptr, Unique_ptr, weak_ptr, auto_ptr

    https://mbevin.wordpress.com/2012/11/18/smart-pointers/
    auto_ptr是旧的东西, 不安全已经被depreciated了。
    shared_ptr, unique_ptr, weak_ptr 是三个新的class. 用它的话需要#include <memory> 然后 用std:: prefix
    由于这几个东西的出现,现代C++已经不需要再手动delete 或者free了。

    unique_ptr

    存一个pointer, Pointer不能被copy, 可以用std::move来转让一个pointer, 转让之后原来的pointer就不再hold东西了
    可以reset, 当pointer不存在的时候,对就的object也就不存在了。
    提供一个办法
    经常用在以下几个地方

    Class Members

    Shared pointer

    推荐使用这个

    weak pointer

    解决循环 pointer的问题, 很少用到

    plain pointer

    什么叫 forward declaration
    &&又是什么意思

    什么时候用pointer 什么时候用referece

    为什么不直接用reference而有时要用pointer

    pointer可以有多层indirection, reference只能有一层
    int *p, 指向int的pointer
    int **q 指向pointer的pointer.
    int &p = a; 指向int的reference
    int &&q指向reference的reference,这是不被允许的, 是错的。
    在函数的参量和return type里面用references.
    当需要进行pointer算术,null pointer需要的时候, 在linkedList, tree这种数据结构里要用pointer。 因为reference不能被reassign value 所以这时是没用的。

    相关文章

      网友评论

          本文标题:C++ value, reference, pointer, *

          本文链接:https://www.haomeiwen.com/subject/arlbsctx.html