Copying array to an array, I really thought I knew what was going on.

D

DaTurk

This is probably a very silly, and simple question. If I'm coding in
CLI, and I want to copy an array to an array, not a deep copy, just
something of the nature arr1 = arr2, what is going on?

I assumed the address of the first element is getting copied, so i
essentially have two handles to the same memory. And changes in one
would be reflected in the other.

But what if I have something like this

public value struct MyStruct
{
Int32 MyNumber;
};

array<MyStruct>^ arr1 = gcnew array<MyStruct(10);

//We fill the array with 10 MyStruct

array<MyStruct>^ arr2 = arr1;

Now what do we have here? since it's a value struct, did we
essentially do a deep copy?
 
?

=?ISO-8859-1?Q?Erik_Wikstr=F6m?=

This is probably a very silly, and simple question. If I'm coding in
CLI, and I want to copy an array to an array, not a deep copy, just
something of the nature arr1 = arr2, what is going on?

If you are coding in C++/CLI you are asking in the wrong group. This
group is for discussing C++ (and while C++/CLI might have a name and
syntax similar to C++ they are two very different things). I would
suggest you ask your question in either one of the microsoft.public.*
groups, microsoft.public.dotnet.languages.vc is probably the one you
want. Another good place to ask is forums.microsoft.com
 
J

Jim Langston

DaTurk said:
This is probably a very silly, and simple question. If I'm coding in
CLI, and I want to copy an array to an array, not a deep copy, just
something of the nature arr1 = arr2, what is going on?

I assumed the address of the first element is getting copied, so i
essentially have two handles to the same memory. And changes in one
would be reflected in the other.

But what if I have something like this

public value struct MyStruct
{
Int32 MyNumber;
};

array<MyStruct>^ arr1 = gcnew array<MyStruct(10);

//We fill the array with 10 MyStruct

array<MyStruct>^ arr2 = arr1;

Now what do we have here? since it's a value struct, did we
essentially do a deep copy?

Ignoring hte fact that this isn't C++ code but something else (C# maybe?)
and presuming ^ is some type of pointer...

If this code was:

public value struct MyStruct
{
Int32 MyNumber;
};

MyStruct* arr1 = new MyStruct[10];

//We fill the array with 10 MyStruct

MyStruct* arr2 = new MyStruct[10];

You would want to iterate over the array copying elements. The manual
method is:

for ( size_t i = 0; i < 10; ++i )
arr2 = arr1;

This is a very common task, however, so TPTB added it to the stl with
std::copy

std::copy( arr1.begin(), arr1.end(), std::inserter(arr2, arr2.end()) );

The syntax for the 3rd parameter of std::copy here may be wrong, but it
should work.

Other than that, ask in a newsgroup related to your language, whatever it
is.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
474,201
Messages
2,571,049
Members
47,654
Latest member
LannySinge

Latest Threads

Top