<div dir="ltr">Do you see a reason why the copy isn&#39;t happening in this specific case? Is it a bug, or a mistake in my code?<div><br></div><div>Thank you,</div><div><br></div><div>Raphael</div></div><br><div class="gmail_quote"><div dir="ltr">On Thu, Aug 4, 2016 at 4:18 PM Brent Royal-Gordon &lt;<a href="mailto:brent@architechies.com">brent@architechies.com</a>&gt; wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">&gt; On Aug 4, 2016, at 1:25 AM, Raphael Sebbe via swift-users &lt;<a href="mailto:swift-users@swift.org" target="_blank">swift-users@swift.org</a>&gt; wrote:<br>
&gt;<br>
&gt; My understanding is that the compiler doesn&#39;t make a real copy in the acopy =  self instruction, and then provides that contents to the mx_gels_ function which modifies the memory contents.<br>
&gt;<br>
&gt;<br>
&gt; public func solve(rhs b: Matrix&lt;T&gt;) -&gt; Matrix&lt;T&gt;? {<br>
&gt;       // ...<br>
&gt;       var acopy = self<br>
&gt;       // ...<br>
&gt;<br>
&gt;       T.mx_gels_(&amp;trans, &amp;m, &amp;n, &amp;nrhs, UnsafeMutablePointer&lt;T&gt;(acopy.values), &amp;lda, UnsafeMutablePointer&lt;T&gt;(x.values), &amp;ldb, UnsafeMutablePointer&lt;T&gt;(workspace), &amp;lwork, &amp;status);<br>
&gt;<br>
&gt;       // ...<br>
&gt;       }<br>
&gt;<br>
&gt;<br>
&gt; Is this expected? I mean, I can force a real copy of course, but value semantics would suggest the code above is correct and wouldn&#39;t need that. Shouldn&#39;t the cast trigger the copy somehow? Or is there a better way of expressing this operation? Thx.<br>
<br>
The `acopy = self` line only copies the reference to the internal buffer. However, converting the array into a pointer will—or at least, if done properly, *should*—force the array to create and switch to using a unique copy of its buffer in preparation for writes through the UnsafeMutablePointer. I believe that happens here: &lt;<a href="https://github.com/apple/swift/blob/master/stdlib/public/core/Pointer.swift#L79" rel="noreferrer" target="_blank">https://github.com/apple/swift/blob/master/stdlib/public/core/Pointer.swift#L79</a>&gt;<br>
<br>
(I say &quot;should&quot; because I&#39;m not sure you&#39;re actually creating those pointers correctly. I believe you ought to be able to just say `&amp;acopy.values` and `&amp;x.values`, and that should be a more reliable way to do it.)<br>
<br>
--<br>
Brent Royal-Gordon<br>
Architechies<br>
<br>
</blockquote></div>