查看: 949|回复: 12

[编程指南] 【共享指针 | Unreal Engine】

[复制链接]

1

主题

342

帖子

7万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
75866
发表于 2016-6-27 01:28:35 | 显示全部楼层 |阅读模式


本页面的内容:

      
声明和初始化

解引用和访问

比较

转换
     
共享指针 是一种非侵入式的、引用计数的特殊类型智能指针,它既支持强引用也支持弱引用。共享指针本身包含了基本智能指针所有的优点,它们可以防止内存泄露、防止存在未初始化的内存等,同时还有一些额外功能,比如:

共享所有权 - 引用计数

自动失效 - 可以安全地引用易发生变化的对象

弱引用 - 允许通过弱指针避免产生引用循环。

针对程序员应用目的进行了改进 - 区分了拥有者和观察者,提供了不能为null的引用 ( 共享引用 )

共享指针的一些基本特性:

非常强大的语法

非侵入式 (但可以反射)

线程安全 (某些条件下)

很好的性能,节约内存
声明和初始化
共享引用必须使用有效的对象进行初始化,且在声明时必须进行初始化。

创建新的共享指针示例:

// 创建空白的共享指针TSharedPtrFTreeNode EmptyNode;// 创建共享指针到新对象TSharedPtrFTreeNode Node( new FTreeNode() );
在第二个示例中,新的FTreeNode对象实际由指向它的共享指针所有。当共享指针离开效果域时,该对象将会销毁。

当您复制一个共享指针时,会添加一个到其所指向的对象的引用。

TSharedPtrFTreeNode OtherNodeRef = Node;
该对象将会持续存在,直到没有共享指针引用它为止。

通过使用 Reset() 方法或通过赋予NULL值,可以重置共享指针。

Node.Reset();Node = NULL;解引用和访问
解引用、调用方法及访问成员的操作方式和您处理常规的C++指针的方式一样。

Node-ListChildren();Node.Get()-ListChildren();( *Node ).ListChildren();比较
您可以判断共享指针是否相等,也就是,判断它们是否指向同一个对象。

TSharedPtrFTreeNode NodeA, NodeB;if( NodeA == NodeB ){    ...}
通过使用 IsValid() 方法或者通过访问原始指针并执行比较,可以判断共享指针是否为NULL。

if( Node.IsValid() ){    ...}if( Node.Get() != NULL ){    ...}转换
共享指针不能进行隐式转换,因为这样做非常危险。比如,以下代码将不能编译:

TSharedPtrfloat Height = 45.0f;
但是,可以使用 MakeShareable() 方法进行显式转换。

TSharedPtrfloat Height = MakeShareable( new float( 45.0f ) );
回复

使用道具 举报

0

主题

854

帖子

2810

积分

vip会员

Rank: 1

积分
2810
发表于 2016-7-2 19:49:49 来自手机 | 显示全部楼层
看看, 顶起. 谢谢楼主
回复 支持 反对

使用道具 举报

0

主题

902

帖子

2945

积分

vip会员

Rank: 1

积分
2945
发表于 2016-7-4 01:51:21 来自手机 | 显示全部楼层
这个必须顶,撸主好人
回复 支持 反对

使用道具 举报

0

主题

859

帖子

2836

积分

vip会员

Rank: 1

积分
2836
发表于 2016-7-4 11:55:13 | 显示全部楼层
谢谢楼主分享
回复 支持 反对

使用道具 举报

0

主题

882

帖子

2904

积分

vip会员

Rank: 1

积分
2904
发表于 2016-7-5 19:46:47 来自手机 | 显示全部楼层
真的是全套吗?
回复 支持 反对

使用道具 举报

0

主题

898

帖子

2938

积分

vip会员

Rank: 1

积分
2938
发表于 2016-7-5 22:14:19 | 显示全部楼层
看看贵不贵,不贵就下
回复 支持 反对

使用道具 举报

0

主题

899

帖子

2933

积分

vip会员

Rank: 1

积分
2933
发表于 2016-7-7 21:21:12 来自手机 | 显示全部楼层
不错 可以下来研究研究
回复 支持 反对

使用道具 举报

0

主题

911

帖子

3028

积分

vip会员

Rank: 1

积分
3028
发表于 2016-7-11 15:11:50 来自手机 | 显示全部楼层
收下了了来了 拉
回复 支持 反对

使用道具 举报

0

主题

937

帖子

3062

积分

vip会员

Rank: 1

积分
3062
发表于 2016-7-12 18:49:31 来自手机 | 显示全部楼层
收下了~~感谢~
回复 支持 反对

使用道具 举报

0

主题

840

帖子

2773

积分

vip会员

Rank: 1

积分
2773
发表于 2016-7-13 01:26:24 来自手机 | 显示全部楼层
谢谢楼主分享!回复看下
回复 支持 反对

使用道具 举报

*滑块验证:
您需要登录后才可以回帖 登录 | enginedx注册

本版积分规则

 
 



邮件留言:


 
返回顶部