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++程序员来管理指针资源的一把利器,其中强指针负责资源回收,而弱指针负责线程安全,配合默契,相得益彰。但是智能指针只有遵循一定的使用规范才能成为利器

引用

引用变量是一个别名,也就是说,它是某个已存在变量的另一个名字。一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量。

UE4 指针与引用(_杰森大师)_第1张图片
其中&代表被引用的意思,或者在.CPP文件夹中
在这里插入图片描述
左边是硬指针一个gameplayerstate,右边是引用到控制器中的gameplayerstate来进行进行取值

引用的作用

1.把引用作为参数: C++ 支持把引用作为参数传给函数,这比传一般的参数更安全。
2.把引用作为返回值:可以从 C++ 函数中返回引用,就像返回其他数据类型一样。

UE4 c++引用声明

TSharfRef< T >变量名;//共享引用,和TSharfRef一样都用于非UObject,无法引用空的对象

C++ 引用 vs 指针

引用很容易与指针混淆,它们之间有三个主要的不同:
1.不存在空引用。引用必须连接到一块合法的内存。
2.一旦引用被初始化为一个对象,就不能被指向到另一个对象。指针可以在任何时候指向到另一个对象。
3.引用必须在创建时被初始化。指针可以在任何时间被初始化

你可能感兴趣的:(UE4C++,UE4,C++)