Memory management 是否有一种方法可以获取值而不是对象的引用

Memory management 是否有一种方法可以获取值而不是对象的引用,memory-management,vala,Memory Management,Vala,我想做一些类似的事情: var data_copy = original_data; 然后在不修改原始数据的情况下对数据进行复制。 数据拷贝和原始数据都是对象 在vala中有没有直接的方法可以做到这一点?这取决于对象。对于structs,这会自动发生。对于对象,没有通用的方法。有些对象有一个dup()方法可以做到这一点,但它不是通用的。没有保证安全的方法复制对象,因为它可能引用系统资源或其他不可复制的内容。“没有保证安全的方法复制对象,因为它可能引用系统资源或其他不可复制的内容。”因此,不要复

我想做一些类似的事情:

var data_copy = original_data;
然后在不修改原始数据的情况下对数据进行复制。 数据拷贝和原始数据都是对象


在vala中有没有直接的方法可以做到这一点?

这取决于对象。对于
struct
s,这会自动发生。对于对象,没有通用的方法。有些对象有一个
dup()
方法可以做到这一点,但它不是通用的。没有保证安全的方法复制对象,因为它可能引用系统资源或其他不可复制的内容。

“没有保证安全的方法复制对象,因为它可能引用系统资源或其他不可复制的内容。”因此,不要复制资源;重复对其的引用。换句话说,执行一个浅拷贝。对于没有引用计数的对象,这将如何工作?如果一个对象是单独拥有的,它就不能被浅层复制。啊,触摸。即使如此,编译器仍然可以判断对象是否拥有任何资源,从而允许对大多数对象进行浅层复制,不是吗?我对瓦拉不是特别熟悉,所以请原谅我的假设。不太可能。因为,GObject类层次结构可以有私有实现,编译器无法确定如何复制它们。Vala中的私有成员在编译时被剥离,不像Java那样,它们总是对VM可见。编译器无法判断超类是否有私有成员。