[swift-evolution] Pitch: Copy constructors for structs
Charles Srstka
cocoadev at charlessoft.com
Wed Dec 23 15:03:34 CST 2015
Introduction:
This is a request for a copy constructor mechanism for structs in Swift.
Motivation:
Suppose you have a class stored inside a struct, like so:
class C {
func copy() -> C { … }
}
struct S {
var i: Int
var c: C
}
and you create a couple of the structs, like so:
let c = C()
let foo = S(i: 1, c: c)
var bar = foo
bar.i = 2
Since the ‘bar’ variable was mutated, it now contains a copy of the original ‘foo’ struct. However, both structs still carry the same pointer to ‘c'. There may be cases where you would want a copy of the struct to make a copy of any reference types stored within; however, that does not seem to be possible currently.
Proposed Solution:
Adding a copy constructor to S that would be called when a copy of the struct is about to be made. This constructor would simply create a new instance, initialize it, and return it. The copy constructor would look like this:
struct S {
var i: Int
var c: C
copy {
return S(i: self.i, c: self.c.copy())
}
}
Structs that do not implement the copy constructor would get the same behavior as they do currently.
Impact on Existing Code:
There should be no impact on existing code that does not implement the copy constructor.
Charles
More information about the swift-evolution
mailing list