C++/CLI解析之基于仓库的对象与跟踪引用[VC/C++编程]
本文“C++/CLI解析之基于仓库的对象与跟踪引用[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
在托管堆上分配对象实例,仿佛是利用托管扩大C++、C#、J#、VB.NET程序员的唯一办法,而利用本地C++的程序员,不但可以在堆上分配内存,乃至更惯于利用基于仓库的对象实例.
目前回想一下从前定义的Point引用类,再来看一下以下变量定义:
Point p1, p2(3,4);
从本地C++的角度来说,p1与p2应为基于仓库的引用类Point实例,哪怕是从普通性的角度来看,它们也是.P1由默许的构造函数初始化,而p2由承受x与y坐标的构造函数初始化.从实现上来看,Point是自包含范例的(也就是说,它不包含任何指针或句柄),但是,作为一个引用类的实例,它仍处于CLI运行时的掌控之下,且在必要时,会被垃圾回收--正因为此,所以不能定义一个引用类的静态或全局实例.
同时,也不能将sizeof利用于指明是引用类实例的表达式,因为sizeof是在编译时举行计算的,而Point对象的大小要直到运行时才能肯定;但是,可将sizeof利用于句柄,因为它的大小在编译时就已经肯定了.
别的,还不能定义一个基于仓库的CLI数组实例.
跟踪引用
本地C++可通过&来定义一个对象的别名,比方,对肆意本地类N,可编写以下代码:
N n1;
N& n2 = n1;
引用必须在定义时举行初始化,且在整个生命期中,它们都锁定于引用同一对象,也就是说,它的值不会改变.引用一个引用类的实例与引用一个本地类基本一致,只不过语法差别罢了.
在程序履行期间,引用类的实例会在内存中"移动",所以,需求对它们举行跟踪,而本地指针与引用却不可以胜任这项工作(特别指不能对一个引用类的实例利用取地址符&),因此,C++/CLI对应地供应了句柄及用于跟踪的引用--在此简称为跟踪引用(Tracking References),比方,你可以定义一个跟踪引用p3,以追踪对象p2:
以上是“C++/CLI解析之基于仓库的对象与跟踪引用[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |