C++ unique_ptr概述 常用操作

文章目錄

  • unique_ptr概述
  • unique_ptr常用操作

unique_ptr概述

uniue_ptr是一個獨占式的指針,同一個時刻, 就只能有一個unique_ptr指向這個對象(內存),unique_ptr的使用格式

unique_ptr<Class_Tyep> P_Name;
unique_ptr的常規初始化:
unique_ptr<int> p; 創建一個空的智能指針
unique_ptr<int> pi(new int);
  • make_unique函數
    make_unique函數是在C++14中引入的,使用了make_unique函數之后不能指定刪除器, 如果不需要使用刪除器, 盡量使用make_unique函數,他的效率高
	unique_ptr<int> p = make_unique<int>(100);auto p2 = make_unique<string>("C++");

unique_ptr常用操作

  • unique_ptr的初始化和賦值
	unique_ptr<int> p1 = make_unique<int>(100);unique_ptr<int> p2(new int(200));//	unique_ptr<int> p3(p1); 不支持定義時初始化
//  p1 = p2; 不支持賦值操作// 支持移動語義unique_ptr<int> p3 = std::move(p2); // 移動過后, p2為空, p3指向原來p2指向的對象.
  • release
    release(): 放棄對指針的控制權, 切斷了智能指針和其所指向的對象的聯系
    他會返回一個裸指針, 可以將返回的這個裸指針手工delete釋放, 也可以用來初始化另外一個智能指針.
	unique_ptr<int> p1(new int(100));unique_ptr<int> p2(p1.release());// delete p1.release();if (p1 == nullptr) cout << "ha ha" << endl;cout << *p2 << endl;
  • reset()
    reset不帶參數: 釋放智能指針指向的對象, 將智能指針置空
	unique_ptr<string> pstr(new string("C++"));pstr.reset();if (pstr == nullptr) cout << "指針為空" << endl;

reset帶參數, 釋放智能指針指向的對象, 并讓該智能指針指向新的對象

	unique_ptr<string> pstr(new string("C++"));//pstr.reset();//if (pstr == nullptr) cout << "指針為空" << endl;unique_ptr<string> pstr1(new string("Java"));pstr.reset(pstr1.release());cout << *pstr << endl;
  • = nullptr
    = nullptr釋放智能指針指向的對象, 并將智能指針置空
	unique_ptr<int> ps1(new int(200));ps1 = nullptr;
  • 指向一個數組
unique_ptr<int[]> p(new int[10]());

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/36174.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/36174.shtml
英文地址,請注明出處:http://en.pswp.cn/news/36174.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

監控Kafka的關鍵指標

Kafka 架構 上面綠色部分 PRODUCER&#xff08;生產者&#xff09;和下面紫色部分 CONSUMER&#xff08;消費者&#xff09;是業務程序&#xff0c;通常由研發人員埋點解決監控問題&#xff0c;如果是 Java 客戶端也會暴露 JMX 指標。組件運維監控層面著重關注藍色部分的 BROKE…

Vue 實現重定向、404和路由鉤子(六)

一、重定向 1.1 修改 Main.vue <template><div><el-container><el-aside width"200px"><el-menu :default-openeds"[1]"><el-submenu index"1"><template slot"title"><i class"…

MongoDB常用命令

什么是MongoDB ? MongoDB 是由C語言編寫的&#xff0c;是一個基于分布式文件存儲的開源數據庫系統。 在高負載的情況下&#xff0c;添加更多的節點&#xff0c;可以保證服務器性能。 MongoDB 旨在為WEB應用提供可擴展的高性能數據存儲解決方案。 MongoDB 將數據存儲為一個…

【網絡基礎實戰之路】基于BGP協議中的聯邦號連接三個AS區域的實戰詳解

系列文章傳送門&#xff1a; 【網絡基礎實戰之路】設計網絡劃分的實戰詳解 【網絡基礎實戰之路】一文弄懂TCP的三次握手與四次斷開 【網絡基礎實戰之路】基于MGRE多點協議的實戰詳解 【網絡基礎實戰之路】基于OSPF協議建立兩個MGRE網絡的實驗詳解 【網絡基礎實戰之路】基于…

Dalsa線陣相機說明(Linea Color GigESeries 2k and 4K)

文章目錄 一. Dalsa相機軟件整體架構二. 相機編號說明以及軟件要求三. 相機硬件參數三. 相機基本參數四. 軟件參數設置列表1. Sensor Control Category2. I/O Control Category3. Counter and Timer Control Category4. Advanced Processing Control Category(1) 平場校正介紹(…

學習Vue:插值表達式和指令

在 Vue.js 中&#xff0c;Vue 實例與數據綁定是構建動態交互界面的關鍵。在這篇文章中&#xff0c;我們將重點介紹 Vue 實例中兩種實現數據綁定的方式&#xff1a;插值表達式和指令。這些機制允許您將數據無縫地渲染到界面上&#xff0c;實現實時的數據更新和展示。 插值表達式…

U盤提示格式化怎么修復?學會這幾個方法!

“不知道大家有沒有遇到過將u盤插入電腦后提示格式化的情況呀&#xff1f;第一次遇到這種情況真的好無助&#xff0c;這是可以修復的嗎&#xff1f;請大家幫幫我&#xff01;” U盤作為一個便捷的存儲工具&#xff0c;幫助我們存儲了很多重要的數據和文件。但在使用的過程中&am…

Dockerfile 使用技巧篇

默認的 docker 鏡像使用 Linux 來當作基礎鏡像 01. 使用 alpine 鏡像&#xff0c;而不是默認的 linux 鏡像 PS: alpine 譯為高山植物&#xff0c;就是很少的資源就能存活的意思。alpine 裁剪了很多不必要的 linux 功能&#xff0c;使得鏡像體積大幅減小了。 比如 FROM node:1…

PHP8定義字符串的方法-PHP8知識詳解

字符串&#xff0c;顧名思義&#xff0c;就是將一堆字符串聯在一起。字符串簡單的定義方法是使用英文單引號&#xff08; &#xff09;或英文雙引號&#xff08;" "&#xff09;包含字符。另外&#xff0c;還可以使用定界符定義字符串。本文還介紹了字符串的連接符。…

TCP的三次握手和四次揮手

文章目錄 三次握手四次揮手TIME_WAITCLOSE_WAIT 使用wireshark觀察 三次握手 握手的最終目的是主機之間建立連接 首先要有兩個預備知識點 三次握手建立連接不一定會成功&#xff0c;其中最擔心的就是最后一次握手失敗&#xff0c;不過會有配套的解決方案建立好連接后是需要被…

【重溫老古董——Strust2框架】基于Idea使用maven創建Strust2項目

1、新建項目 紅色圈出的部分是【強制】,其他部分看個人喜好。 2、修改 pom 文件,管理依賴 <dependency><groupId>org.apache.struts</groupId><artifactId>struts2-core</artifactId><version>2.5.22</version></dependency&g…

微服務中RestTemplate訪問其他服務返回值轉換問題

背景&#xff1a; 接收一個springcloud項目&#xff0c;UI模塊訪問其他服務的接口&#xff0c;返回數據統一都是使用fastjson進行轉換&#xff0c;但是新開發了幾個新模塊之后發現fastjson很多bug&#xff08;各種內存溢出&#xff09;&#xff0c;但是很多地方已經重度依賴fa…

數據結構:力扣OJ題(每日一練)

目錄 題一&#xff1a;環形鏈表 思路一&#xff1a; 題二&#xff1a;復制帶隨機指針的鏈表 思路一&#xff1a; 本人實力有限可能對一些地方解釋的不夠清晰&#xff0c;可以自己嘗試讀代碼&#xff0c;望海涵&#xff01; 題一&#xff1a;環形鏈表 給定一個鏈表的頭節點…

IDEA如何調試Stream API

Stream API現在在實際開發中應用非常廣泛&#xff0c;經常會遇到需要調試Stream API的場景&#xff0c;這篇文章主要講解如何使用IDEA調試Stream Testpublic void test(){Stream.of(10, 20, 30, 40, 50).mapToInt(e->e*10).filter(e->e>200).forEach(System.out::pri…

使用css實現時間線布局(TimeLine)

前言 在使用uni-app開發微信小程序過程中&#xff0c;遇到了時間軸布局&#xff0c;由于每項的內容高度不一致&#xff0c;使用uniapp自帶的擴展組件uni-steps&#xff0c;樣式布局無法對齊豎線&#xff0c;于是自己造輪子&#xff0c;完成特殊的布局。顯示效果如下&#xff1…

linux shell變量

linux shell變量 1、變量命名規則2、只讀變量3、刪除變量 1、變量命名規則 變量名不能加$命名只能使用英文字母、數字和下劃線&#xff0c;首個字母不能以數字開頭中間不能有空格。可以有下劃線不能使用標點符號不能使用bash中的關鍵字 username"tom"引用 $userna…

WebDAV之π-Disk·派盤+Commander One

Commander one是一款為Mac用戶設計的雙窗格文件管理器,Commander One專業版在原先的版本功能擁有較大的提升。Commander One PRO可以幫助大家將文件從一個地方復制到另一個地方,支持多標簽瀏覽、搜索、自定義熱鍵設置、顯示隱藏文件等功能。 π-Disk派盤 – 知識管理專家 派…

(一)創建型設計模式:4、原型模式(Prototype Pattern)

目錄 1、原型模式的含義 2、C實現原型模式的簡單實例 1、原型模式的含義 通過復制現有對象來創建新對象&#xff0c;而無需依賴于顯式的構造函數或工廠方法&#xff0c;同時又能保證性能。 The prototype pattern is a creational design pattern in software development. …

【校招VIP】java語言考點之Map1.7和1.8

考點介紹&#xff1a; HashMap是大中小廠面試的高頻考點&#xff0c;主要從底層結構&#xff0c;和線程安全等角度來進行考察&#xff0c;考察點比較集中&#xff0c;但是有一定難度。 分為初級和高級兩種&#xff1a;初級一般集中在中小公司的map的key-value的可重復和可空問題…

Server - WandB 統計運行 Epoch 以及 手動上傳日志

歡迎關注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/132227253 WandB (Weights & Biases) 是在線的模型訓練可視化工具&#xff0c;可以幫助跟蹤機器學習項目&#xff0c;記錄運行中的超參數和輸…