c++中構造對象實例的兩種方式及其返回值

c++中,構造對象實例有兩種方式,一種返回對象實例,一種返回該對象實例的指針。如下所示:

一、兩種返回值

RedisConn conn1; //得到實例conn1;RedisConn *conn2 = new RedisConn();//得到指針conn2;RedisConn conn3 = new RedisConn();//錯誤,類型不匹配

意思是說,RedisConn conn;就是構造了一個實例,而通過new方式的話,就是返回指針。太奇怪了,跟c#、java完全不一樣啊。在c#或java中,RedisConn conn意味著conn沒有賦值,new RedisConn()返回一個誠實可靠的實例。

二、后續兩種不同的處理方式

1、構造于棧

RedisConn conn;

這種方式下,conn 是在棧(stack)上分配的。棧是由編譯器自動管理的內存區域,用于存儲局部變量。conn 的生命周期與它的作用域相關聯。當程序執行離開定義 conn 的代碼塊時(比如函數結束),conn 會被自動銷毀,其析構函數會自動調用。

這種方式的話,如果想訪問它的成員函數和成員變量,通過"."號,比如conn.rec_cnt;

void function() {RedisConn conn; // 在棧上創建一個 RedisConn 實例conn.someMethod(); // 直接調用方法
} // 當函數結束時,conn 自動被銷毀

優點:
自動管理內存,無需手動釋放。
簡單易用,適合于局部使用的小型對象。

缺點:
棧上的空間有限,不適合創建大型對象或需要長時間存在的對象。
對象的生命周期受限于其作用域。

2、構造于堆

RedisConn* conn = new RedisConn();

內存分配:new RedisConn() 在堆(heap)上為 RedisConn 對象分配內存,并返回指向該對象的指針。
生命周期:堆上的對象不會隨著作用域的結束而自動銷毀。你需要顯式地調用 delete 來釋放這塊內存,否則會導致內存泄漏。
訪問方式:通過 -> 操作符來訪問指針所指向的對象的成員函數和成員變量。

void function() {RedisConn* conn = new RedisConn(); // 在堆上創建一個 RedisConn 實例conn->someMethod(); // 使用 -> 操作符調用方法// 記得釋放內存delete conn;conn = nullptr; // 設置為 nullptr 避免懸掛指針
}

優點:
可以動態控制對象的生命周期,適合于需要長時間存在或大小不確定的對象。
堆上的空間相對較大,適合創建大型對象。

缺點:
需要手動管理內存,增加了出錯的可能性(如忘記釋放內存導致內存泄漏)。
分配和釋放堆上的內存通常比棧上的操作更慢。

三、堆和棧

1、棧(Stack)

后進先出。

2、堆(Heap)

特殊的完全二叉樹結構,存進去,自然而然得到一個位置,比如它的子節點都比它小,形成一個小山包(小土堆);或者反過來,它所有兒子都比它大。所以堆查找最大值最為快速。有最大堆,最小堆。沒有好大堆。

二叉樹的概念我已經忘得一干二凈,依稀記得有一種二叉樹是:

左邊的子節點都比它小,右邊的子節點都比它大

這種跟堆沒有啥關系,這叫二叉搜索樹,排過序的,便于搜索。

與堆相對應,可能是坨,完全沒有順序可言。

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

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

相關文章

【Unity筆記】PathCreator使用教程:用PathCreator實現自定義軌跡動畫與路徑控制

在Unity開發過程中,角色移動、攝像機動畫、軌道系統、AI巡邏等功能中,路徑控制是常見又復雜的需求之一。如何優雅、高效地創建路徑并控制對象沿路徑運動,是游戲開發、動畫制作乃至工業仿真中的關鍵問題。 在這篇文章中,我將介紹一…

JAVA實戰開源項目:健身房管理系統 (Vue+SpringBoot) 附源碼

本文項目編號 T 180 ,文末自助獲取源碼 \color{red}{T180,文末自助獲取源碼} T180,文末自助獲取源碼 目錄 一、系統介紹二、數據庫設計三、配套教程3.1 啟動教程3.2 講解視頻3.3 二次開發教程 四、功能截圖五、文案資料5.1 選題背景5.2 國內…

[人機交互]交互設計過程

*一.設計 1.1什么是設計 設計是一項創新活動,旨在為用戶提供可用的產品 –交互設計是“設計交互式產品、以支持人們的生活和工作” 1.2設計包含的四個活動 – 識別用戶的需要( needs )并建立需求( requirements &…

1. 視頻基礎知識

1. 圖像基礎概念 像素:像素是一個圖片的基本單位,pix是英語單詞picture,加上英語單詞“元素element”,就得到了pixel,簡稱px。所以“像素”有“圖像元素”之意。分辨率:指的是圖像的大小或者尺寸。比如 19…

代理IP是什么,有什么用?

一、什么是代理IP? 簡單理解,代理IP是一座橋梁——你通過它連接到目標服務器,而不是直接暴露自己。這里的“IP”是網絡世界中的地址標簽,而代理IP在運行時,蹦跶到臺前,成為目標服務器看到的那個“地址”。…

日常代碼邏輯實現

日常代碼邏輯實現: 1.防抖 解釋: 防抖是指n秒內只執行一次,如果n秒內事件再次觸發,則重新計算時間 應用場景: 搜索框輸入聯想(避免每次按鍵都發送請求)窗口尺寸調整 代碼實現:…

北斗導航 | RTKLib中模糊度解算詳解,公式,代碼

模糊度解算 一、模糊度解算總體流程二、核心算法與公式推導1. **雙差模糊度定義**2. **浮點解方程**三、LAMBDA算法實現細節1. **降相關變換(Z-transform)**2. **整數最小二乘搜索**3. **Ratio檢驗**四、部分模糊度固定(Partial Ambiguity Resolution, PAR)1. **子集選擇策…

基于大模型的母嬰ABO血型不合溶血病全方位預測與診療方案研究

目錄 一、引言 1.1 研究背景與目的 1.2 國內外研究現狀 1.3 研究方法與創新點 二、母嬰 ABO 血型不合溶血病概述 2.1 發病機制 2.2 臨床表現 2.3 流行病學特征 三、大模型在母嬰 ABO 血型不合溶血病預測中的應用 3.1 模型選擇與構建 3.2 預測指標與數據輸入 3.3 模…

驅動-互斥鎖

互斥鎖可以說是“量值” 為 1 的 信號量, 最終實現的效果相同, 既然有了信號量, 那為什么還要有互斥鎖呢? 這就是我們這里需要了解并掌握的 文章目錄 參考資料互斥鎖的介紹互斥鎖結構體 - mutex互斥鎖 API互斥鎖實驗源碼程序-mute…

人工智能100問?第17問:智能體的定義及其基本特征?

目錄 一、通俗解釋 二、專業解析 三、權威參考 智能體是能夠通過傳感器感知環境、自主決策并借助執行器采取行動以實現特定目標的智能實體或系統。 一、通俗解釋 智能體就像一臺能自己“看、想、動”的智能機器。比如你手機里的語音助手,它能聽懂你說的話&…

Linux系統入門第十一章 --Shell編程之函數與數組

一、Shell函數 1、函數的用法 Shell函數可用于存放一系列的指令。在Shell腳本執行的過程中,函數被置于內存中,每次調用函數時不需要從硬盤讀取,因此運行的速度比較快。在Shell編程中函數并非是必須的元素,但使用函數可以對程序進…

Baumer工業相機堡盟工業相機的工業視覺中為什么偏愛“黑白相機”

Baumer工業相機堡盟工業相機的工業視覺中為什么偏愛“黑白相機” Baumer工業相機?為什么偏愛“黑白相機”??工業視覺中為什么傾向于多使用黑白相機黑白相機在工業視覺中的應用場景有哪些? Baumer工業相機 工業相機是常用與工業視覺領域的常用專業視覺…

MiM: Mask in Mask Self-SupervisedPre-Training for 3D Medical Image Analysis

Abstract Vision Transformer在3D醫學圖像分析的自監督學習(Self-Supervised Learning,SSL)中展現了卓越的性能。掩碼自編碼器(Masked Auto-Encoder,MAE)用于特征預訓練,可以進一步釋放ViT在各…

SQL注入的繞過方式

1.注釋與空白符繞過 利用#,--,/**/替代被過濾的注釋符 利用%09(Tab),%0A(換行) ,/**/代替空格:如union%0Aselect%0A1,2,3 2.編碼繞過: URL編碼,雙重編碼,十六進制編碼,Unicode編…

數據加密方式(對稱加密/非對稱加密 /數字簽名/證書)

文章目錄 數據加密方式常用加密方式對比哈希算法(Hashing)哈希算法的特點常見的哈希算法哈希算法的應用哈希與加密的區別哈希算法的安全性問題 對稱加密(Symmetric Encryption)工作原理主要特點常見的對稱加密算法優缺點 非對稱加…

UnityDots學習(五)

此篇開始研究實際應用到項目或個人Demo中。參考國外CodeMonkey的RTS包含一些基礎API應用。 前言 游戲不必100%使用Dots完全實現。因為面向組件開發一個功能復雜度和調試都比面向對象要更難。對于某些模塊,比如UI,事件管理系統,網絡等&#…

移動端前端開發中常用的css

在開發移動端項目的時候,很多樣式都是相同的,比如說圖標大小,頭像大小,頁面底部保存(添加按鈕),項目主體顏色等等,對于這些在項目中常用到的,通常都會寫在公共樣式中(pub…

Vue3 中 ref 與 reactive 的區別及底層原理詳解

一、核心區別 1. 數據類型與使用場景 ? ref 可定義基本類型(字符串、數字、布爾值)和對象類型的響應式數據。對于對象類型,ref 內部會自動調用 reactive 將其轉換為響應式對象。 語法特點:需通過 .value 訪問或修改數據&#…

AGV導航控制器技術方案——基于EFISH-SBC-RK3576/SAIL-RK3576的國產化革新?(新一代工業級自主可控解決方案)?

一、方案核心架構 ?1. 硬件拓撲設計? ?主控單元?:SAIL-RK3576核心板(八核A72A53M0異構架構)?傳感器層?: 雙激光雷達(RS-LiDAR-16線 SICK TIM240)9軸IMU(BMI088) 輪式編碼器&…

AI 輔助生成原型圖

AI 輔助生成原型圖 一、HTML 轉設計稿工具介紹 網頁轉設計稿工具 使用 MasterGo 的 html-to-mastergo 插件可將網頁轉為設計稿,支持: 任意在線 HTML 文件(通過將 AI 生成的 UI 發布為在線頁,可通過 Vercel 實現)離…