zoukankan      html  css  js  c++  java
  • 类里面的赋值和拷贝函数<<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;
     }
      
    
    
  • 相关阅读:
    浅谈折半搜索
    NOIP PJ/CSP-J 题目选做
    SDN第五次上机作业
    SDN第四次上机作业
    SDN第三次上机作业
    SDN第二次上机作业
    必看
    关于tensor
    permute与transpose
    1823. 找出游戏的获胜者
  • 原文地址:https://www.cnblogs.com/sunstars/p/3990721.html
Copyright © 2011-2022 走看看