【C/C++】為什麼需要複製建構函式的同時通常也需要過載複製運算子

風塵_NULL發表於2019-11-30

假設有一個類,需要例項中的c屬性保持唯一

那麼:就需要建構函式生成唯一的c值;同時用另外一個例項新建一個例項,也就要保持唯一,那麼就需要複製函式分配唯一值;同時我們也可能將一個類的例項賦值給另外一個例項,但是預設複製運算建構函式不能保證唯一


#include <iostream>
#include <thread>
#include <map>

using namespace std;

class CopyStruct {
public:
    CopyStruct();
    CopyStruct(const CopyStruct &);
    CopyStruct& operator=(const CopyStruct &c);
    static int b;
    int c=0;

};
CopyStruct::CopyStruct(){

    this->b=this->b+1;
    c=this->b;

}

CopyStruct::CopyStruct(const CopyStruct &c){
    b=b+1;
    this->c=b;


}
//如果這裡註釋掉,就會出現c,b例項的c值是同樣的
CopyStruct& CopyStruct::operator=(const CopyStruct &c){
    return *this;
}
int CopyStruct::b =10;
int main()
{
    CopyStruct a;
    CopyStruct b;
    CopyStruct c=b;
    std::cout<<a.c<<b.c<<c.c<<std::endl;
    c=b;
    std::cout<<"預設複製建構函式之後:"<<c.c<<std::endl;
/*
 map<string,string> arrays;
 arrays["name"]="cccc";
  std::cout<<arrays["name"]<<std::endl;
 using name=const char *;

 name a="this is a aliaes";
 std::cout<<a<<std::endl;
*/
}



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30221425/viewspace-2666310/,如需轉載,請註明出處,否則將追究法律責任。

相關文章