Dart是否提供任何形式的类似于memcpy的功能?我想将一个对象的数据复制到另一个对象的地址:
var foo = Foo("hi");
var bar = Foo("hello");
memcpy(&foo, &bar, sizeof(Foo));
没有。
Dart不允许您如此访问内存,并且在没有类协作的情况下,它无法浅拷贝对象。
如果要复制对象,则必须使用构造函数创建一个新对象,并将其填写在字段中。Dart构造函数可以执行任何操作,并且某些类的构建方式依赖于它们维护某种一致的全局状态的构造函数。例如,一个类可以通过使用初始化一个字段来为其对象分配连续的ID final int id = _staticCounter++;
。复制该对象将打破所有对象具有不同ID的不变性。
尚无浅表副本的解决方法。
对于深层副本,有一种解决方法。如果您的平台支持dart:isolate
,则可以向您自己发送一个对象:
import "dart:mirrors";
Future<T> clone<T>(T value) {
return (ReceivePort()..sendPort.send(value)).first;
}
并非所有值都可以通过发送端口发送。并非所有类对于非使用构造函数创建的对象都能正常工作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句