UE4 指針與引用(_傑森大師)

指針與引用

在信息工程中,指針是一個用來指示一個內存地址的計算機語言的變量或中央處理器(CPU)中的寄存器(Register)。指針一般出現在比較近機器語言的語言,如彙編語言或C語言。面嚮對象語言如Java一般避免用指針,而是引用。

指針

指針是一個變量,爲另一個變量的地址,就是內存位置的直接地址,和其他變量一樣,你必須在使用指針存儲其他變量地址前,對其進行聲明,可爲空指針,在UE4中

AActor*Acharacter;

*其中AActor類是指針的基類,ACharacter是變量的名稱。符號是用來指定一個變量是指針。使用指針時會頻繁進行以下幾個操作:定義一個指針變量、把變量地址賦值給指針、訪問指針變量中可用地址的值。這些是通過使用一元運算符

指針有幾個概念,
1.C++ 支持空指針。NULL 指針是一個定義在標準庫中的值爲零的常量。
2.可以對指針進行四種算術運算:++、–、+、-
3.指針和數組之間有着密切的關係。
4.可以定義用來存儲指針的數組。
5.C++ 允許指向指針的指針。
6.通過引用或地址傳遞參數,使傳遞的參數在調用函數中被改變。
7.C++ 允許函數返回指針到局部變量、靜態變量和動態內存分配。

UE4 c++指針聲明

AActor*變量名;//硬指針,場景實際存在對象指針
TSubclassof< AActor>變量名;//硬對象類指針,允許使用類型安全傳遞UClass模板
TSoftObjectPtr< AActor>變量名;//軟對象指針,在需要時才進行加載
TSoftClassPtr < AActor>變量名;//軟對象類指針,同上
TWeakObjectPtr< AActor>變量名;//弱指針,可以訪問一個對象又不對造成計數加1,一般用於局部變量,無需保存
TSharedPtr< T>變量名;//共享智能指針,不用用於UObject對象,因爲UObject有自己的一套GC垃圾回收規則,TSharedPtr用於自定義的結構體(不繼承UObject)

壞處

指針的管理是讓人頗爲頭痛的一件事,也是隱藏在系統中的顆定時炸彈,輕則內存泄露,重則系統崩潰。而智能指針是幫助焦頭爛額的C++程序員來管理指針資源的一把利器,其中強指針負責資源回收,而弱指針負責線程安全,配合默契,相得益彰。但是智能指針只有遵循一定的使用規範才能成爲利器

引用

引用變量是一個別名,也就是說,它是某個已存在變量的另一個名字。一旦把引用初始化爲某個變量,就可以使用該引用名稱或變量名稱來指向變量。

在這裏插入圖片描述
其中&代表被引用的意思,或者在.CPP文件夾中
在這裏插入圖片描述
左邊是硬指針一個gameplayerstate,右邊是引用到控制器中的gameplayerstate來進行進行取值

引用的作用

1.把引用作爲參數: C++ 支持把引用作爲參數傳給函數,這比傳一般的參數更安全。
2.把引用作爲返回值:可以從 C++ 函數中返回引用,就像返回其他數據類型一樣。

UE4 c++引用聲明

TSharfRef< T >變量名;//共享引用,和TSharfRef一樣都用於非UObject,無法引用空的對象

C++ 引用 vs 指針

引用很容易與指針混淆,它們之間有三個主要的不同:
1.不存在空引用。引用必須連接到一塊合法的內存。
2.一旦引用被初始化爲一個對象,就不能被指向到另一個對象。指針可以在任何時候指向到另一個對象。
3.引用必須在創建時被初始化。指針可以在任何時間被初始化

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章