• 类里面的赋值和拷贝函数<<0922


    类里面的赋值和拷贝函数

    ** 明确一个问题:拷贝与赋值的区别**

          A a, c;  
          A b = a;//显式复制构造函数,等效于A b(a);将内存中的一段区域初始化为一个类对象
          c = a;//赋值函数,空间已经分配,只是进行赋值 
    

    ** 构造、析构、复制、赋值四个函数,若没有显式的定义,系统会默认的建立一个隐式的函数**

    class CTest
    {
    public:
         CTest();
         ~CTest();
         CTest(const CTest &);
         void operator=(const CTest &);
    };
    
    
    • 系统默认的复制构造函数,只是浅拷贝,只是简单的将字段复制过去,一般情况下是够用的,如果类里面涉及到动态分配内存空间(有指针),则需要手动写一个深拷贝,(访问冲突和多次delete)详细的参考转载文章
    • 若想禁用类的复制和赋值的功能,可以将复隐式的赋值+复制函数显式的放在private下面,如要连友元的一起禁用掉,则只放它们的函数声明(没有数据块{},编译的时候会报错)
       	#include <iostream>                                                                             
      	#include <string>
      	#include <vector>
      	using namespace std;
      
      	//Test不支持复制和赋值。所以不能放入vector
      	class Test
      	{
      	    public:
    	        Test() {}
     
     	   private:
           //设为私有,禁用了Test的复制和赋值能力 
           Test(const Test &); //用于复制
           void operator=(const Test &); //用于赋值
        };
     
     int main(int argc, const char *argv[])
      {
          vector<Test> vec;
          Test t;
          vec.push_back(t);
     	  return 0;
     }
      
    
    
  • 相关阅读:
    热修复之类加载机制总结
    socket之tcp如何维护长连接
    sqlite之多线程处理
    android主线程ActivityThread-转载
    线程之ThreadLocal使用
    图片之压缩总结
    线程之交替执行的实例
    git的最常用命令总结
    sqlite之常见的语句
    activity之分析-3分钟看懂Activity启动流程
  • 原文地址:https://www.cnblogs.com/sunstars/p/3990721.html
Copyright © 2020-2023  润新知