您现在的位置: 中国男护士网 >> 考试频道 >> 计算机等级 >> 二级辅导 >> C十十 >> 辅导 >> 正文    
  C++/CLI思辨录之代理构造函数 【注册男护士专用博客】          

C++/CLI思辨录之代理构造函数

www.nanhushi.com     佚名   不详 

  在本文中,我将解释为什么使用本地指针来管理对象。原因在于对象是以垃圾收集器移动的。所以,当对象移动时,本地指针就变成无效的。所以,如果你想取得一个托管对象的本地指针,你就会遇到一个编译错。下面的代码显示了这上点。

using namespace System;
int _tmain()
{
 int ^ hnd = gcnew int(100);
 int* np = &hnd; // Genarates a compile error

  但是本地指针还是非常有用的,如在使用指针算术和指针比较时就有许多的优点。所以新的C++ CLI允许你使用一个内部指针实现同样的功能。内部指针是本地指针的一个超集。所以它能够做任何内部指针所能做的一切。 但是当垃圾收集器移动指针所指向的对象时,内部指针也帮助程序实现其指向的地址的更新。

  现在让我们看一下如何用内部指针来实现指针算术运算。

#include "stdafx.h"
#include
using namespace System;
using namespace stdcli::language;
int _tmain()
{
 const int SIZE = 10;
 array^ arr = gcnew array(SIZE);
 for(int idx = 0; idx < SIZE; idx++)
 {
  arr[idx] = idx + 1;
 }
 // 取得指向数组第一个元素的指针
 interior_ptr p = &arr[0];
 // 通过增加指针值读取并输出数组元素
 for(int idx = 0; idx < 10; idx++)
 {
  printf("Value of the element at %Xh ", p);
  Console::WriteLine(" is {0}",*(p++));
 }
 Console::ReadLine();

  不管垃圾收集器执行多少次和数组元素移动多少次,上面的代码仍然能工作良好。于是C++的力量又回到了.Net运行时刻库上。但是要小心使用内部指针。这些指针与本地指针非常相似,当试图存取不允许操作的内存区段时能给程序造成危害。例如,如果我在上面的代码中试图存取下一个p++,它将返回恰好在上面数组元素上方4字节的内存段位置。 

 

文章录入:杜斌    责任编辑:杜斌 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
     

    联 系 信 息
    QQ:88236621
    电话:15853773350
    E-Mail:malenurse@163.com
    免费发布招聘信息
    做中国最专业男护士门户网站
    最 新 热 门
    最 新 推 荐
    相 关 文 章
    没有相关文章
    专 题 栏 目