我有两个矩形,其中一个偶尔会重置为其他矩形。在C ++中,我会这样做:
_rect = _resetRect;
但是在Dart中,这实际上意味着_rect
现在与_resetRect
指向同一对象,这不是我想要的。
我当前的解决方案是:
_rect.left = _resetRect.left;
_rect.width = _resetRect.width;
_rect.top = _resetRect.top;
_rect.height = _resetRect.height;
这是愚蠢的。 Other questions建议没有复制对象的内置方法(就像C ++中那样),并且您必须依靠提供clone()
方法的对象。但是Rectangle
没有人,该怎么办?
即使它确实具有clone()
方法,也不会分配一个全新的Rectangle
而不是仅仅设置现有字段的字段(例如C ++的operator=
),因此效率较低?
答案 0 :(得分:0)
C ++也无法深度复制包含指向其他对象的指针/引用的对象。在Dart中,所有值都是引用,因此限制适用于所有对象。
我认为这是一个MutableRectangle
,因为Rectange
中的dart:math
是不可修改的。
该类确实无法克隆另一个矩形的值,因此您必须复制每个矩形。我会为此使用级联:
_rect
..left = _resetRect.left
..top = _resetRect.top
..width = _resetRect.width
..height = _resetRect.height;
或者,如果它发生得足够频繁,则可以创建一个辅助函数:
void copyRectangle(MutableRectangle target, Rectangle source) {
target
..left = source.left
..top = source.top
..width = source.width
..height = source.height;
}