CLR

qwaszx6641 2011-09-23 04:59:42

我自己定义的一个类

ref class tagReadBuffer
{
public:
int D0008;
int D0009;
};

在From里面

tagReadBuffer ^ a = gcnew tagReadBuffer;


Void Button(...)
{
tagReadBuffer ^b = a;
b->D0008=1;
b->D0009=1;

//问题就在这里 为什么 a的值也跟着改啊? 我刚步入CLR 希望前辈能告诉下 我用的是VS2010 是做C++的、

}
...全文
81 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
星小野 2011-09-26
  • 打赏
  • 举报
回复
CLR是CLI的实现版本,是一种运行时环境,.NetFramework的主要执行引擎.

拷贝是有一个新的内存.

@sj97a007
的解释正确
qwaszx6641 2011-09-23
  • 打赏
  • 举报
回复
能CLR 里面有拷贝的函数吗? 拷贝不就是新的内存了? 求解
枪牌 2011-09-23
  • 打赏
  • 举报
回复
和C++没什么区别啊
自己写个方法深拷贝
枪牌 2011-09-23
  • 打赏
  • 举报
回复
tagReadBuffer ^ a = gcnew tagReadBuffer;//生成指针、(其实还有个同步索引块)内存空间,指针指向内存地址
tagReadBuffer ^b = a; //生成指针,b与a相同

两个指针指向同一片内存,即同一个对象
这里要把指针和对象分开来看
你也可以按浅拷贝理解
qwaszx6641 2011-09-23
  • 打赏
  • 举报
回复
没有 这个重新分配个空间 我当然了解 如果是C++ 我就懂了。

这个CLR 我今天刚接触, 所以我的意思是 我b的值得 需要得到a的值, 但是我想做到的一点就是 修改b的时候a值不变就行 没其他的了。 我也没有找到拷贝的函数 , 现分配空间然后赋值 也没有意义 两个用的是一个内存地址 所以 ^b=a; 不可用。 想知道正确的方法 我看网上说 什么Object对象 定义对象的话 不让强转 定义指针还修改值 疯了
qwaszx6641 2011-09-23
  • 打赏
  • 举报
回复
这个 我知道 我就是想 做一个中间变量a 而且这个中间变量a是可以修改的 但是b的值不想改 但是这里我不知道CLR 里面怎么样才能做到 做到这样 也没找到拷贝的函数。
逐风 2011-09-23
  • 打赏
  • 举报
回复
汗。。 不碰c++
你没搞懂对象的概念,帮你分析下,有错勿怪。
tagReadBuffer ^ a = gcnew tagReadBuffer;//这里new 出来一个 tagReadBuffer
tagReadBuffer ^b = a; //这里相当于 把 ^a的地址传递给 ^b 从内存上看,2个变量指向的地址是一样的
所以你改变 b 还是a 都是同一个对象。
然后修改下:(有错勿怪)
tagReadBuffer ^b = gcnew tagReadBuffer;//新建立一个对象, 这时 a 和 b 的地址不一样

qwaszx6641 2011-09-23
  • 打赏
  • 举报
回复
对啊 语法我不是很了解 你说传引用 能不能给写一段代码我看看呀。
逐风 2011-09-23
  • 打赏
  • 举报
回复
clr 里面 类都是 传递引用的。

再者,你就new 了一个,貌似也找不到第二个吧。

17,740

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET Framework
社区管理员
  • .NET Framework社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧