国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C++note

2019-11-08 00:35:47
字體:
來源:轉載
供稿:網友
C++智能指針分為三類:C++11的智能指針unique_ptr :不允許多個指針共享資源,可以用標準庫中的move函數轉移指針,將指針賦值給其他指針同時這個指針失效shared_ptr :多個指針共享資源weak_ptr :可復制shared_ptr,但其構造或者釋放對資源不產生影響vector<元素類型> 數組對象名(數組長度);基于范圍的for循環配合auto舉例#include <vector>#include <iostream>int main(){std::vector<int> v = {1,2,3};for(auto i = v.begin(); i != v.end(); ++i)std::cout << *i << std::endl;for(auto e : v)std::cout << e << std::endl;}淺層復制實現對象間數據元素的一一對應復制。深層復制當被復制的對象數據成員是指針類型時,不是復制該指針成員本身,而是將指針所指對象進行復制。移動構造在現實中有很多這樣的例子,我們將錢從一個賬號轉移到另一個賬號,將手機SIM卡轉移到另一臺手機,將文件從一個位置剪切到另一個位置……移動構造可以減少不必要的復制,帶來性能上的提升。C++11標準中提供了一種新的構造方法——移動構造。C++11之前,如果要將源對象的狀態轉移到目標對象只能通過復制。在某些情況下,我們沒有必要復制對象——只需要移動它們。C++11引入移動語義:源對象資源的控制權全部交給目標對象移動構造函數問題與解決當臨時對象在被復制后,就不再被利用了。我們完全可以把臨時對象的資源直接移動,這樣就避免了多余的復制操作。使用深層復制構造函數返回時構造臨時對象,動態分配將臨時對象返回到主調函數,然后刪除臨時對象。#include<iostream>using namespace std;class IntNum {public:IntNum(int x = 0) : xptr(new int(x)){ //構造函數cout << "Calling constructor..." << endl;}IntNum(const IntNum & n) : xptr(new int(*n.xptr)){//復制構造函數,通過原有對象的const變量//的值new出來一個新的int變量 交給xptr管理cout << "Calling copy constructor..." << endl;};~IntNum(){ //析構函數delete xptr;//xptr是用指針new出來的對象 所以需要deletecout << "Destructing..." << endl;}int getInt() { return *xptr; }PRivate:int *xptr;};//返回值為IntNum類對象IntNum getNum() {IntNum a;//???????不用new,不用deletereturn a;}int main() {cout<<getNum().getInt()<<endl;return 0;}IntNum(IntNum && n): xptr( n.xptr){ //移動構造函數,指針的賦值 n.xptr = nullptr;//現在這個n已經不要了,將其賦值位空cout << "Calling move constructor..." << endl;}類的名字 新對象名字=類的名字 && 原來對象名字 可變參數的函數形參表
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 汝城县| 赤峰市| 马尔康县| 临漳县| 内江市| 望奎县| 瑞安市| 礼泉县| 郴州市| 忻州市| 株洲市| 丹寨县| 民县| 宁德市| 卓资县| 乐亭县| 彰武县| 龙井市| 徐闻县| 平罗县| 辽阳市| 荃湾区| 布尔津县| 常山县| 梁平县| 安远县| 湾仔区| 汤阴县| 峨山| 通山县| 太谷县| 宝清县| 定州市| 普兰县| 高密市| 龙门县| 云南省| 望江县| 南岸区| 象州县| 确山县|