【C/C++】為什麼需要複製建構函式的同時通常也需要過載複製運算子
假設有一個類,需要例項中的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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- C++複製建構函式C++函式
- C++ 禁用類的複製建構函式和賦值運算子C++函式賦值
- C++再議建構函式及複製建構函式深度複製C++函式
- C/C++——建構函式、複製建構函式和解構函式的執行時刻C++函式
- C++複製控制:拷貝建構函式C++函式
- 帶複製建構函式、賦值運算子的模板佇列函式賦值佇列
- C++ 移動構造和複製建構函式匹配C++函式
- 深層複製建構函式函式
- C++ 過載運算子和過載函式C++函式
- 消除複製建構函式和“模板式複製建構函式”中的冗餘程式碼 (轉)函式
- 深度解讀《深度探索C++物件模型》之複製建構函式C++物件模型函式
- C++複製控制:賦值操作符和解構函式C++賦值函式
- 批註:C++中複製建構函式與過載賦值操作符總結:預設淺拷貝,帶指標的需要深拷貝C++函式賦值指標
- 預設建構函式、引數化建構函式、複製建構函式、解構函式函式
- YTU-OJ-實現複數類中的加運算子過載【C++運算子過載】C++
- 物件的生存期 記憶體 深度複製 複製建構函式 筆記物件記憶體函式筆記
- 第十八篇:複製控制( 中 ) --- 過載賦值運算子賦值
- 開心檔之C++ 過載運算子和過載函式C++函式
- 過載運算子、解構函式函式
- AD資料複製需要的埠
- C++結構體作為map的key的時候需要過載C++結構體
- C++運算子過載C++
- C++ 運算子過載C++
- C++——運算子過載C++
- [C++]運算子過載C++
- C++中的複製控制C++
- C++中運算子的過載C++
- 結構體中的指標&&複製賦值建構函式改造結構體指標賦值函式
- 關於C++複製控制C++
- C++ 建構函式實戰指南:預設構造、帶引數構造、複製構造與移動構造C++函式
- 第十七篇:複製控制( 上 ) --- 自定義複製函式函式
- C++運算子過載詳解C++
- C++過載的奧義之運算子過載C++
- MySQL主從複製_複製過濾MySql
- c#淺複製與深複製C#
- 為什麼MCU也需要AI?AI
- 如何同時複製、分類檔案
- 蘋果的設計為什麼難以複製蘋果