zoukankan      html  css  js  c++  java
  • c++ 深拷贝,浅拷贝,赋值操作的调用情况

      声明时,初始化=操作,()操作都是调用拷贝构造函数,只有初始化完成后,=操作才是operator=,示例:

    Type a;
    Type b(a); // 拷贝构造函数

    Type a;
    Type b = a; // 拷贝构造函数
    Type a;
    Type b;
    b = a;  // operator=(Type&)


     由于operator=和拷贝构造函数功能几乎一样,通常管理深拷贝成员,实现1个operator=就行

    class Type
    {
    const Type& operator= (const Type& right)
    {
    if (this == &right)
    return *this;
    this->m_1 = right.m_1;
    this->m_2 = right.m_2;
    ...
    // 动态分配空间,复制独立一份数据,实现深拷贝
    return *this;
    }
    Type(const Type& right)
    {
    // 可以跟operator=写一样代码,为了复用,直接调
    *this = right;
    }
    };

    当类中有指针成员时,一般有两种方式来管理指针成员:一是采用值型的方式管理,每个类对象都保留一份指针指向的对象的拷贝;另一种更优雅的方式是使用智能指针,从而实现指针指向的对象的共享。智能指针在ATL里面常见,即句柄类。

  • 相关阅读:
    JavaScript获取浏览器高度和宽度值
    机器学习2
    2014.7.23
    2014.7.22
    STM32 定时器
    STM32 外部中断
    STM32--systick延时
    STM32 时钟
    输入捕获
    DAC
  • 原文地址:https://www.cnblogs.com/asight/p/2234789.html
Copyright © 2011-2022 走看看