zoukankan      html  css  js  c++  java
  • 19.C++-(=)赋值操作符、初步编写智能指针

    (=)赋值操作符注意事项

    首先要判断两个操作数是否相等

    返回值一定是 return *this; 返回类型是Type&型,避免连续使用=后,出现bug

    比如:

    注意:指针对象之间赋值是不会调用(=)复制操作符的

    编译器默认提供的类函数

    包括了:构造函数,析构函数,拷贝构造函数, (=)赋值操作符

    智能指针的由来

    在以前C程序里,使用malloc()等函数动态申请堆空间时,若不再需要的内存没有被及时释放,则会出现内存泄漏,若内存泄漏太多,则会直接导致设备停止运行,特别是嵌入式设备,可能有些设备一上电就要运行好几个月.

    在C++里,为了减少内存泄漏,所以便引出了智能指针

    * ” “ = ”等操作符重载,让这个对象拥有指针的特性.

    • 最后通过析构函数,来释放类里的指针.

    一元操作符,也就是说不能带参数

    ->:

    当ptr的类型是普通指针类型时,等价于:(*ptr).mem

    当ptr的类型是时,等价于:(ptr.operator->())->value    等价于: ( *(ptr.operator->()) ).value

    所以->操作符函数的返回类型是type*,返回值是一个指针变量本身(不带*)

    具体参考: https://segmentfault.com/q/1010000004620896

    接下来个示例,指向一个int型的智能指针

    运行打印:

    从结果可以看到, Point p每被从新定义之前,便会自动调用析构函数来释放之前用过的内存,

    这样便避免了野指针的出现

    接下来,我们继续完善上面代码,使它能够被赋值.

    运行打印:

    但是,还有个缺点,就是这个智能指针仅仅只能指向int类型,没办法指向其它类型. 

    接下来继续修改,通过类模板来使这个智能指针能指向多种类型

    运行打印:


    文章来源:https://www.cnblogs.com/lifexy/p/8658605.html

  • 相关阅读:
    [POJ 2096] Collecting Bugs
    [POJ 3774] Scout YYF I
    [HDU 4418] Time travel
    [hdu 4586] Play the Dice
    [HDU 4507] 吉哥系列故事――恨7不成妻
    [HDU 4734] F(x)
    [Codeforces] Round #352 (Div. 2)
    刷题向》关于一道像差分约束的数学题BZOJ1045(NORMAL)
    刷题向》关于一道奇怪的贪心(田忌赛马)BZOJ1034(NORMAL-)
    刷题向》关于线段树的区间开根号 BZOJ3211(NORMAL+)
  • 原文地址:https://www.cnblogs.com/xiongjim/p/9673932.html
Copyright © 2011-2022 走看看