递归火山软件开发平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 火山 源码 类库
查看: 6991|回复: 10
打印 上一主题 下一主题

[视窗] 关于指针,读指针处对象读出来,重新赋值没反应

[复制链接]

55

主题

313

帖子

2478

积分

金牌会员

Rank: 6Rank: 6

积分
2478
QQ
跳转到指定楼层
楼主
发表于 2022-3-29 20:54:08 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 李先森 于 2022-3-29 20:55 编辑

这里无法理解了
读指针处对象,读出来重新赋值,为什么没效果呢???
这个问题困扰了好几天了,只好单独测试一下,发现我理解错误了,
我的问题就是读出来重新赋值,该如何写
回复

使用道具 举报

69

主题

447

帖子

3113

积分

论坛元老

Rank: 8Rank: 8

积分
3113
沙发
发表于 2022-3-29 21:47:40 | 只看该作者
本帖最后由 itismine 于 2022-3-29 21:49 编辑

最版中有个新增的高性能内存分配类的例程和你的情况类似。你可以参考一下。


另:点击关闭按钮时,你定义的局部对象是不是应该已经销毁了。
回复

使用道具 举报

26

主题

1901

帖子

6928

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
6928
板凳
发表于 2022-3-29 23:22:09 | 只看该作者
本帖最后由 Xelloss0618 于 2022-3-30 10:28 编辑

这样重新赋值一般不会有效果的,火山的类默认是复制赋值,例如:
对象B = 读指针处对象 (对象A指针, 对象类)
对象B复制了对象A的数据,但跟对象A是互相独立的,你操作对象B不会改变对象A的内容,你现在该明白了吧?

下面这样写才能通过指针修改对象A的内容:
读指针处对象 (对象A指针, 对象类).文件名 = "wwwwww"

回到第一句,我说的是一般不会有效果,但有部分类是比较特别,比如窗口类和各种窗口组件类。
你把窗口组件赋值到新变量,操作的仍是同一个窗口组件。
回复

使用道具 举报

69

主题

447

帖子

3113

积分

论坛元老

Rank: 8Rank: 8

积分
3113
地板
发表于 2022-3-30 10:13:47 | 只看该作者
Xelloss0618 发表于 2022-3-29 23:22
这样重新赋值一般不会有效果的,火山的类默认是复制赋值,例如:
对象B = 读指针处对象 (对象A指针, 对象类 ...

不知道这个关于类的东西在哪里看到的?
回复

使用道具 举报

26

主题

1901

帖子

6928

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
6928
5#
发表于 2022-3-30 10:28:04 | 只看该作者
itismine 发表于 2022-3-30 10:13
不知道这个关于类的东西在哪里看到的?

这个没哪里可以看,要说的话,得看对象类的源码了。
火山的类都是复制赋值。
我上面举窗口组件类的例子,真较真的话,实际上赋值后也是两个不同的对象,因为它们的对象指针不一样。
但操作窗口组件靠的是窗口句柄,把句柄复制过去的,操作自然还是同一个窗口,
回复

使用道具 举报

69

主题

447

帖子

3113

积分

论坛元老

Rank: 8Rank: 8

积分
3113
6#
发表于 2022-3-30 11:05:15 | 只看该作者
Xelloss0618 发表于 2022-3-30 10:28
这个没哪里可以看,要说的话,得看对象类的源码了。
火山的类都是复制赋值。
我上面举窗口组件类的例子, ...

在样例解决方案中有个ADO的例子。关于共享数据库连接的。具体你可以看一下。好像有些问题。
我这个是根据那个改的一个简单的对象。比较好控制。
具体见图。



不知道这2种调用方式有什么区别。好像一种方式是另一种方式的指针一样。

共享对象测试.rar (22.96 KB, 下载次数: 4)

回复

使用道具 举报

55

主题

313

帖子

2478

积分

金牌会员

Rank: 6Rank: 6

积分
2478
QQ
7#
 楼主| 发表于 2022-3-30 11:21:11 来自手机 | 只看该作者
Xelloss0618 发表于 2022-3-29 23:22
这样重新赋值一般不会有效果的,火山的类默认是复制赋值,例如:
对象B = 读指针处对象 (对象A指针, 对象类 ...

谢谢各位了,只是这种复制方式太麻烦了,要是能引用多方便啊,官方为什么不支持呢?
回复

使用道具 举报

26

主题

1901

帖子

6928

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
6928
8#
发表于 2022-3-30 13:41:45 | 只看该作者
itismine 发表于 2022-3-30 11:05
在样例解决方案中有个ADO的例子。关于共享数据库连接的。具体你可以看一下。好像有些问题。
我这个是根据 ...

火山默认是返回变量的副本(跟复制赋值差不多)
你可以在方法上加上属性 @视窗.参考返回 = 真
这样就会返回变量本身(确保是外部变量,且没有被销毁)
回复

使用道具 举报

69

主题

447

帖子

3113

积分

论坛元老

Rank: 8Rank: 8

积分
3113
9#
发表于 2022-3-30 15:09:57 | 只看该作者
Xelloss0618 发表于 2022-3-30 13:41
火山默认是返回变量的副本(跟复制赋值差不多)
你可以在方法上加上属性 @视窗.参考返回 = 真
这样就会返 ...

果然如此,你真是太厉害了。
回复

使用道具 举报

55

主题

313

帖子

2478

积分

金牌会员

Rank: 6Rank: 6

积分
2478
QQ
10#
 楼主| 发表于 2022-3-30 19:00:57 | 只看该作者
Xelloss0618 发表于 2022-3-30 13:41
火山默认是返回变量的副本(跟复制赋值差不多)
你可以在方法上加上属性 @视窗.参考返回 = 真
这样就会返 ...

这个试了下确实可以,有没有新建 局部变量=方法返回的参考值,然后操作局部变量来修改数据,因为自定义类里面有很多成员需要赋值和修改,每次都得用方法调用才能赋值,太麻烦了,要是能通过变量来批量赋值和修改,要方便些,
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|递归火山软件开发平台 ( 鄂ICP备18029190号 )

GMT+8, 2024-11-25 01:23 , Processed in 0.102706 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表