Dart中的memcpy等效项

问题描述 投票:1回答:1

Dart是否提供任何形式的类似memcpy的功能?我想将一个对象的数据复制到另一个对象的地址:

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

memcpy(&foo, &bar, sizeof(Foo)); 
dart memcpy
1个回答
2
投票

编号

Dart不允许您这样访问memory,并且在没有类合作的情况下,它无法浅拷贝对象。

如果要复制对象,则必须使用构造函数创建一个新对象,并将其填写在字段中。 Dart构造函数可以执行任何操作,并且某些类的构建方式依赖于它们维护某种一致的全局状态的构造函数。例如,一个类可以通过用final int id = _staticCounter++;初始化一个字段来为其对象分配连续的ID。复制该对象将打破所有对象具有不同ID的不变性。

没有针对浅表副本的已知解决方法。

对于深层副本,有一种解决方法。如果您的平台支持dart:isolate,则可以向您自己发送对象:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.