日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

【C++】38.类成员变量声明为 对象与指针的区别

發布時間:2025/3/21 c/c++ 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【C++】38.类成员变量声明为 对象与指针的区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在我們平時寫代碼或閱讀代碼時,經常會看到,某個類A中需要使用另一個類B的方法。那么下面會看到兩種用法:

  • 一種是直接定義一個B類對象。
  • 一種是在類A中定義一個B類指針;

如:

// 頭文件 std::shared_ptr<cv::Mat> img_ptr_; std::shared_ptr<BlockingQueue<std::shared_ptr<cv::Mat>>>img_queue_ptr_; // .cc文件 // std::make_shared在動態內存中分配一個對象并初始化它, 返回指向此對象的shared_ptr img_ptr_= std::make_shared<cv::Mat>; img_queue_ptr_ = std::make_shared<BlockingQueue<std::shared_ptr<cv::Mat>>>(1);
//定義在 頭文件 .h 中,聲明一個基類接口指針,沒分配內存 std::unique_ptr<Visualizer> visualizer_; //在 .cc文件中,將指針重置為類指針,并分配內存 visualizer_.reset(new Visualizer());

還有下面這種基類子類指針用法:

//定義在 頭文件 .h 中,聲明一個基類接口指針,沒分配內存 std::unique_ptr<BaseDetector> detector_; //在 .cc文件中,將指針重置為某個具體子類指針,并分配內存 detector_.reset(new Pix2pixDetector());

原文鏈接
類的指針:他是一個內存地址值,他指向內存中存放的類對象(包括一些成員變量所賦的值).
對象,他是利用類的構造函數在內存中分配一塊內存(包括一些成員變量所賦的值).
在應用時:
1.引用成員: 對象用" . “操作符; 指針用” -> "操作符.
2.生命期: 若是成員變量,則是類的析構函數來釋放空間;若是函數中的臨時變量,則作用域是該函數體內.而指針,則需利用delete 在相應的地方釋放分配的內存塊.
注意:用new ,一定要delete…

類的對象:用的是內存棧,是個局部的臨時變量.
類的指針:用的是內存堆,是個永久變量,除非你釋放它.

當類是有虛函數的基類,Func是它的一個虛函數,則調用Func時:
類的對象:調用的是它自己的Func;
類的指針:調用的是分配給它空間時那種類的Func;

對于一個類的對象和這個類的指針(用new運算符分配內存)在應用時有何區別
1.類和對象是兩回事,對象是類的實例;
2.對象是在棧中分配的,使用new生成的對象是在堆中分配的;
3.要發揮虛函數的強大作用,必須使用指針來訪問對象.

指針可以實現多態,直接用對象不行
執行定義對象,在棧空間
new的在堆

類型決定了你能做什么.

其實作用基本一樣 都是為了調用類的成員變量 和成員函數用的
當你希望明確使用這個類的時候,最好使用對象,如果你希望使用C++中的動態綁定,則最好使用指針或者引用
指針和引用用起來更靈活,容易實現多態等

1.在類的聲明尚未完成的情況下,可以聲明指向該類的指針,但是不可聲明該類的對象…
2.父類的指針可以指向子類的對象…

定義對象實例時,分配了內存。指針變量則未分配類對象所需內存,除非new了

指針變量是間接訪問,但可實現多態(通過父類指針可調用子類對象),并且沒有調用構造函數。
直接聲明可直接訪問,但不能實現多態,聲明即調用了構造函數(已分配了內存)。
至于那個效率高要看程序調用過程而定。

C++的精髓之一就是多態性,只有指針或者引用可以達到多態。對象不行

用指針:
第一實現多態。
第二,在函數調用,傳指針參數。不管你的對象或結構參數多么龐大,你用指針,傳過去的就是4個字節。如果用對象,參數傳遞占用的資源就太大了

原文鏈接
C++編程過程中,在一個類的數據成員是一個類時,定義這個成員變量為對象還是指針是有講究的。

在C++中,

ClassTest objTest;就已經構造了對象,分配了空間

而在C#、Java中,

ClassTest objTest;只是聲明,并沒有分配空間。

在C++中,ClassTest objTest;是在棧上分配空間,ClassTest *pobjTest = new ClassTest;是在堆上分配空間。
棧分配的空間自動回收,堆分配的空間需要手動回收。

那么對于C++類中數據成員為類類型時,將它定義為對象還是指針,并沒有絕對的情況,具體情況可以具體對待。

本質上是對象分配區域的問題:前者是在棧(stack)上分配空間,后者是在堆(heap)上分配空間。

一般來說,可以定義為對象,在如下情況考慮把數據成員定義成指針:

  • 1)有多態的情況;會用到虛函數,基類指針;
  • 2)可能和別的類共享,或只是引用別的類里的某個對象,所以生命周期不是很確定(這個可以考慮智能指針);
  • 3)大數據類,如果定義成對象,會導致當前對象無法在棧內創建。
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的【C++】38.类成员变量声明为 对象与指针的区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 成人玩具h视频 | 精东影业一区二区三区 | 日韩在线影视 | 国产96在线 | 亚洲 | 91亚洲欧美激情 | 日本精品人妻无码免费大全 | 日本a级在线 | 国产精久久久久 | 亚洲瑟瑟| 秋霞影院午夜老牛影院 | 国产成人无码精品久久久性色 | 精品无码久久久久久久久久 | 琪琪电影午夜理论片八戒八戒 | 91成人在线看 | 懂色tv| 亚洲成人精品久久 | 毛利兰被扒开腿做同人漫画 | 中文字幕日韩经典 | 黑人操bb| 国产精品蜜臀 | 97免费超碰 | 亚洲欧洲视频 | 天天干天天爽天天射 | 欧美三级视频在线 | 在线日韩视频 | 国产123区在线观看 91国产一区二区 | 国产免费不卡视频 | 最近中文字幕在线视频 | 五月婷婷激情五月 | 国产91热爆ts人妖系列 | 亚洲精品美女 | 亚洲欧美一区二区三区在线 | 国产一区日韩 | 欧美影院久久 | 在线观看涩涩视频 | 国产ts在线视频 | 激情网综合 | 国产人人草 | 九九九九久久久久 | 国产性猛交xxxⅹ交酡全过程 | 国产精品无码av在线有声小说 | 韩国三级做爰视频 | 99青青草 | 欧美成人69| 天天爽| 91精品国产色综合久久不卡粉嫩 | 91视频色 | 国产麻豆精品在线观看 | 精品人妻中文无码av在线 | 一本黄色片 | 微拍福利一区二区 | 麻豆影视在线观看 | 少妇精品高潮欲妇又嫩中文字幕 | 国产精品免费视频一区二区 | 黄色一级大片在线免费看国产 | 午夜久久久久久久久久 | 亚洲经典在线 | 美女福利在线 | 中文人妻一区二区三区 | 好紧好爽再浪一点视频 | 国产一区二区精品 | 亚洲黄色免费网站 | 女人扒开腿免费视频app | 激情视频区 | 少妇2做爰bd在线意大利堕落 | 亚洲欧美日韩精品在线观看 | 3d动漫精品啪啪一区二区免费 | 欧美高清视频一区二区 | 天天干夜夜撸 | 亚洲欧美日韩一区二区三区在线观看 | 午夜精品一区二区三区免费视频 | 一级特黄免费视频 | 国产一区二 | 青青伊人影院 | 免费黄色激情视频 | 日本激情小视频 | 最近高清中文在线字幕在线观看 | 在线观看中文字幕一区 | 黄色喷水视频 | 日批视频免费在线观看 | 国产色中色 | 永久精品 | 成人欧美一区二区三区黑人孕妇 | 91亚洲精品久久久蜜桃网站 | 日韩av网址在线观看 | 毛片毛片毛片毛片毛片毛片毛片毛片毛片 | 日韩少妇一区二区三区 | 91av国产视频 | 国产精品无码免费播放 | 欧美在线视频精品 | 欧美巨鞭大战丰满少妇 | 成都免费高清电影 | 男女猛烈无遮挡免费视频 | 国产一级免费av | 小泽玛利亚在线 | 日韩成人无码影院 | 三级黄色免费网站 | 青青在线播放 | 147人体做爰大胆图片成人 |