需要注意的问题

数据结构:相互之间存在一种或多种特定关系的数据元素的集合

const的成员(const A a) 不能访问非const的函数
const函数不能修改其数据成员


深拷贝 和 浅拷贝?

深拷贝和浅拷贝可以简单理解为:如果一个类拥有资源,当这个类的对象发生复制过程的时候,资源重新分配,这个过程就是深拷贝。
反之,没有重新分配资源,就是浅拷贝。
当类中成员变量需要动态开辟内存空间(即为指针)的时候,需要使用深拷贝的方式
m_pArr为指针变量。
浅拷贝:B继承A则B的指针变量指向A的指针变量申请的空间,当B释放时,A内的指针则为野指针。
    Array(const Array &arr){ /// 拷贝构造函数
        m_iCount = arr.m_iCount;
        m_pArr = arr.m_pArr; ///两个指针指向同一块内存
        cout<<"Array &"<<endl;
    }

深拷贝:
Array(const Array &arr){ /// 拷贝构造函数
      m_iCount = arr.m_iCount;
      m_pArr = new int[m_iCount];
      for(int i=0;i<m_iCount;i++) m_pArr[i]=arr.m_pArr[i];
        cout<<"Array &"<<endl;
    }

引用和指针的区别?
1.引用不能为空,初始化时必须赋值。
指针可以指向空,但不安全。
所以,使用引用的效率高,因为引用不需要验证它的合法性
2.指针可以重新赋值指向另一个不同的对象,引用总是指向初始化时指定的对象,不能改变。
string s1 = (“Nancy”);
string s2 = (“Clandy”);
string * p = &s1;
string &r = s1;
r = s2; //r仍然引用s1但是s1的值为“Clandy”
p = s1;//p指向s2,s1值不变
3.指针是一个实体需要分配空间,引用是变量的别名,不会分配内存空间
4.多级指针但是没有多级引用。
5.指针和引用的自增运算不一样,指针是下一个地址,引用是变量值加一
6.sizeof(引用) 返回的是指向的变量的大小,指针返回的是自身。
7.引用访问一个变量是直接访问,指针是间接访问。
使用:当我们要指向一个对象并且不想改变其指向,或者在重载运算符时防止不必要的语义误会,使用引用。
其余情况使用指针。即可能存在不指向对象的情况,需要在不同的时刻指向不同的对象。
重载运算符举例:[]返回一个目标对象,能被赋值
vector<int> vec(10);
vec[5] = 6;
*vec[5] = 6;//如果返回的是指针,要这样写,看起来像一个向量指针。

猜你喜欢

转载自www.cnblogs.com/Lune-Qiu/p/9009075.html