8.8日知识点总结

敲了几天的基础知识demo,发现特别容易忘记,于是决定接下来的每一天都把敲过的基础代码贴到博客上,一来是自己把知识点重新梳理,加深理解;二来是把自己对一些问题的解决办法都记录下来,以便以后备忘。

今天的知识点比较零乱,我得好好整理。
1.引用包装器

#include <iostream>
template<typename T>
void com(T arg)
{
    std::cout << &arg << std::endl;
    arg++;
}
void main()
{
    int num = 20;
    std::cout << &num << " " << num << std::endl;
    com(std::ref(num));//std::ref//会把传入的值包装成可引用的值
    com(num);
    std::cout << &num << " " << num << std::endl;
    std::cin.get();
}

2.C++智能指针
unique_ptr是一个独享所有权的智能指针,它提供了严格语义上的所有权,包括:
1,拥有它所指向的对象;
2,无法进行复制构造,也无法进行复制赋值操作。也就是说,我们无法得到指向同一个对象的两个unique_ptr。但是可以进行移动构造和移动赋值操作。
3,保存指向某个对象的指针,当它本身被删除释放的时候,会使用给定的删除器释放它所指向的对象。

c++11新出现的智能指针auto_ptr,存在于头文件memory中。
下面的代码是VS2013里面的源码:

template<class _Ty,
    class _Dx>  // = default_delete<_Ty>
    class unique_ptr
        : private _Unique_ptr_base<_Ty, _Dx,
            is_empty<_Dx>::value
                || is_same<default_delete<_Ty>, _Dx>::value>
    {   // non-copyable pointer to an object
public:
    typedef unique_ptr<_Ty, _Dx> _Myt;
    typedef _Unique_ptr_base<_Ty, _Dx,
        is_empty<_Dx>::value
            || is_same<default_delete<_Ty>, _Dx>::value> _Mybase;
    typedef typename _Mybase::pointer pointer;
    typedef _Ty element_type;
    typedef _Dx deleter_type;

    using _Mybase::get_deleter;

    unique_ptr() _NOEXCEPT
        : _Mybase(pointer())
        {   // default construct
        static_assert(!is_pointer<_Dx>::value,
            "unique_ptr constructed with null deleter pointer");
        }

    unique_ptr(nullptr_t) _NOEXCEPT
        : _Mybase(pointer())
        {   // null pointer construct
        static_assert(!is_pointer<_Dx>::value,
            "unique_ptr constructed with null deleter pointer");
        }

    _Myt& operator=(nullptr_t) _NOEXCEPT
        {   // assign a null pointer
        reset();
        return (*this);
        }

    explicit unique_ptr(pointer _Ptr) _NOEXCEPT
      
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值