Dart 中的 memcpy 等价物

memcpy equivalent in Dart

Dart 是否提供任何形式的类似 memcpy 的函数?我想将一个对象的数据浅拷贝到另一个对象的地址:

var foo = Foo("hi");
var bar = Foo("hello");

memcpy(&foo, &bar, sizeof(Foo)); 

没有

Dart 不允许您访问 内存,并且如果没有 class 合作,它无法浅拷贝对象。

如果你想复制一个对象,你必须使用构造函数创建一个新对象并让它填充字段。 Dart 构造函数可以做任何事情,并且一些 classes 的构建方式依赖于维护一些一致的全局状态的构造函数。例如,class 可以通过使用 final int id = _staticCounter++; 初始化字段来为其对象分配连续的 ID。复制该对象会破坏所有对象具有不同 ID 的不变性。

浅拷贝没有已知的解决方法。

对于深拷贝,有一种方法可以解决这个问题。如果你的平台支持dart:isolate,你可以给自己发送一个对象:

import "dart:mirrors";
Future<T> clone<T>(T value) {
  return (ReceivePort()..sendPort.send(value)).first;
}

并非所有值都可以通过发送端口发送。对于不是使用构造函数创建的对象,并非所有 classes 都能正常工作。