使用Boost對非值語義的C++類實現noncopyable
C++中的類根據用途可以分為如下三類:
1 值語義(資料抽象ADT):可以拷貝,拷貝之後和原來的物件沒關係。
(1)如基礎型別int等,容器型別vector,list,set等。Date型別、Timestamp型別。
(2)封裝一些資料成員,並提供操作的介面。
(3)支援資料聚合
(4)支援函式過載、操作符過載
(5)效率無損
(6)模板與泛型
(7)是C++程式設計正規化的重要一種
(8)生命週期和int一樣無需管理
2 物件語義:不應該被拷貝noncopyable
2.1 基於物件(object-based):封裝
2.2 物件導向(object-oriented):封裝、訊息傳遞。對應著資源(檔案、員工、印表機、賬號、套接字)
(1)生命期要管理
(2)引用語義
(3)智慧指標參與
(4)noncopyable
綜上所述,我們在開發的時候應該對所有的非值語義的類設定noncopyable
參考:《Linux多執行緒服務端程式設計》陳碩著
程式碼:
#include "boost/noncopyable.hpp"
#include <vector>
#include <iostream>
class Company : public boost::noncopyable
{
public:
Company(){}
~Company(){}
void print(void){std::cout<<"company::print()"<<std::endl;}
};
int main(int, char *[])
{
Company a;
a.print();
//Company b(a);//編譯錯誤
//Company b=a;//編譯錯誤
Company b;
b.print();
//b=a;//編譯錯誤
std::vector<Company> vc;//OK
//vc.push_back(a);//編譯錯誤
return 0;
};
輸出:company::print()
company::print()
請按任意鍵繼續. . .
相關文章
- C++使用Boost多執行緒C++執行緒
- 利用boost.python庫實現C++與Python的整合PythonC++
- 簡單解析C++基於Boost庫實現命令列C++命令列
- 使用phpopenssl擴充套件實現非對稱加密PHP套件加密
- 用c++實現淨現值的計算C++
- c++版的NMS(非極大抑制)實現C++
- golang 中,非對稱加密的實現Golang加密
- 泛型程式設計在非C++語言中的實現之探討 (轉)泛型程式設計C++
- Boost timer實現
- C++中類及類的定義 (轉)C++
- MSSQL-最佳實踐-使用非對稱金鑰實現列加密SQL加密
- 自定義實現Complex類
- boost bind及function的簡單實現Function
- 對Boost庫中的數值到字串的轉換的改進 (轉)字串
- oracle對非使用繫結變數的語句去重Oracle變數
- 貝葉斯實現文字分類C++實現文字分類C++
- C++ 大整數類(BigInteger類)實現C++
- 使用C++和QT實現Log自定義日誌系統C++QT
- SpringBoot應用使用自定義的ApplicationContext實現類Spring BootAPPContext
- 使用PHP實現詞法分析與自定義語言PHP詞法分析
- 演算法:如何使用C++實現一個簡單的集合類演算法C++
- C++父類指標指向子類物件的實現原理C++指標物件
- Sql Server 自定義約束 實現:某列 可空,但非空值唯一不重複SQLServer
- 各類排序演算法的c++實現排序演算法C++
- c++佇列類别範本的實現C++佇列
- 牛頓插值 C++ 和 Matlab實現C++Matlab
- 如何實現IIS 7.0對非HTTP協議的支援HTTP協議
- 手把手教你實現boost::bind
- 全卷積網路(FCN)實戰:使用FCN實現語義分割卷積
- c++介面定義及實現舉例C++
- 實現鍵值對儲存(二):以現有鍵值對儲存為模型模型
- SVM多分類器的實現(Opencv3,C++)OpenCVC++
- 區域性類實現C++的閉包薦C++
- C語言預設引數值的實現C語言
- C 語言使用非迴圈雙向連結串列實現佇列佇列
- 【JAVA】自定義類載入器實現類隔離Java
- 使用Task實現非阻塞式的I/O操作
- 實現鍵值對儲存(五):雜湊表實現