[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.c++

Returning an array inside a structure that was allocated in a function

ctj951

11/13/2008 4:46:00 PM

I have a very specific question about a language issue that I was
hoping to get an answer to. If you allocate a structure that contains
an array as a local variable inside a function and return that
structure, is this valid?

As shown in the code below I am allocating the structure in the
function and then returning the structure. I know if the structure
contained only simple types (int, float) this will work without
problems as you are getting a copy of those items returned from the
function. But I'm wondering with an array which is being returned
from the function as part of the structure is a pointer to the local
variable or perhaps a copy of that array (as it would be for simple
types). I think we might be getting a pointer returned but I'm not
sure.

#include <iostream>
using namespace std;

struct Item
{
int itemNumber;
int internalItems[5];
};


Item CreateItem()
{
Item newItem;

newItem.itemNumber = 10;

newItem.internalItems[ 0 ] = 1;
newItem.internalItems[ 1 ] = 2;
newItem.internalItems[ 2 ] = 3;
newItem.internalItems[ 3 ] = 7;
newItem.internalItems[ 4 ] = 9;

return( newItem );
}


void PrintItem( Item iItemToPrint )
{
cout << iItemToPrint.internalItems[0];
}


int main ()
{
Item testItem = CreateItem();

PrintItem( testItem );

return 0;
}

This is a specific question about a specific language issue. Thank
You.
4 Answers

Leandro Melo

11/13/2008 5:02:00 PM

0

On 13 nov, 14:46, ctj951 <chadsspameaterem...@yahoo.com> wrote:
> I have a very specific question about a language issue that I was
> hoping to get an answer to.  If you allocate a structure that contains
> an array as a local variable inside a function and return that
> structure, is this valid?
>
> As shown in the code below I am allocating the structure in the
> function and then returning the structure.  I know if the structure
> contained only simple types (int, float) this will work without
> problems as you are getting a copy of those items returned from the
> function.  But I'm wondering with an array which is being returned
> from the function as part of the structure is a pointer to the local
> variable or perhaps a copy of that array (as it would be for simple
> types).  I think we might be getting a pointer returned but I'm not
> sure.
>
> #include <iostream>
> using namespace std;
>
> struct Item
>    {
>    int itemNumber;
>    int internalItems[5];
>    };
>
> Item CreateItem()
>    {
>    Item newItem;
>
>    newItem.itemNumber = 10;
>
>    newItem.internalItems[ 0 ] = 1;
>    newItem.internalItems[ 1 ] = 2;
>    newItem.internalItems[ 2 ] = 3;
>    newItem.internalItems[ 3 ] = 7;
>    newItem.internalItems[ 4 ] = 9;
>
>    return( newItem );
>    }
>
> void PrintItem( Item iItemToPrint )
>    {
>    cout << iItemToPrint.internalItems[0];
>    }
>
> int main ()
>    {
>    Item testItem = CreateItem();
>
>    PrintItem( testItem );
>
>    return 0;
>    }
>
> This is a specific question about a specific language issue.  Thank
> You.



This is one of the reasons copy constructors exist. ;) Think about
which semantics you would like for a particular class (deep copy,
shallow copy) and write a copy constructor accordingly.

--
Leandro T. C. Melo

Bo Persson

11/13/2008 5:13:00 PM

0

ctj951 wrote:
> I have a very specific question about a language issue that I was
> hoping to get an answer to. If you allocate a structure that
> contains an array as a local variable inside a function and return
> that structure, is this valid?
>
> As shown in the code below I am allocating the structure in the
> function and then returning the structure. I know if the structure
> contained only simple types (int, float) this will work without
> problems as you are getting a copy of those items returned from the
> function. But I'm wondering with an array which is being returned
> from the function as part of the structure is a pointer to the local
> variable or perhaps a copy of that array (as it would be for simple
> types). I think we might be getting a pointer returned but I'm not
> sure.
>
> #include <iostream>
> using namespace std;
>
> struct Item
> {
> int itemNumber;
> int internalItems[5];
> };
>
>
> Item CreateItem()
> {
> Item newItem;
>
> newItem.itemNumber = 10;
>
> newItem.internalItems[ 0 ] = 1;
> newItem.internalItems[ 1 ] = 2;
> newItem.internalItems[ 2 ] = 3;
> newItem.internalItems[ 3 ] = 7;
> newItem.internalItems[ 4 ] = 9;
>
> return( newItem );
> }
>
>
> void PrintItem( Item iItemToPrint )
> {
> cout << iItemToPrint.internalItems[0];
> }
>
>
> int main ()
> {
> Item testItem = CreateItem();
>
> PrintItem( testItem );
>
> return 0;
> }
>
> This is a specific question about a specific language issue. Thank
> You.

This is quite ok. You are returning a struct, and all its members will
be copied. There are no pointers involved.


Bo Persson


mail.dsp

11/14/2008 12:39:00 PM

0

No need to think about it. Since in structure you've allocated memory
at compile time therefore default copy constructor will be invoked and
it will copy all the member of structure properly. Even it will work
in case of assignment too. But in case of run time allocation you'll
have to define your copy constructor(deep copy) and overload
assignment operator for proper functionality.

--
Daya S. Prasad

Leandro Melo

11/14/2008 1:05:00 PM

0

On 13 nov, 15:02, Leandro Melo <ltcm...@gmail.com> wrote:
> On 13 nov, 14:46, ctj951 <chadsspameaterem...@yahoo.com> wrote:
>
>
>
> > I have a very specific question about a language issue that I was
> > hoping to get an answer to.  If you allocate a structure that contains
> > an array as a local variable inside a function and return that
> > structure, is this valid?
>
> > As shown in the code below I am allocating the structure in the
> > function and then returning the structure.  I know if the structure
> > contained only simple types (int, float) this will work without
> > problems as you are getting a copy of those items returned from the
> > function.  But I'm wondering with an array which is being returned
> > from the function as part of the structure is a pointer to the local
> > variable or perhaps a copy of that array (as it would be for simple
> > types).  I think we might be getting a pointer returned but I'm not
> > sure.
>
> > #include <iostream>
> > using namespace std;
>
> > struct Item
> >    {
> >    int itemNumber;
> >    int internalItems[5];
> >    };
>
> > Item CreateItem()
> >    {
> >    Item newItem;
>
> >    newItem.itemNumber = 10;
>
> >    newItem.internalItems[ 0 ] = 1;
> >    newItem.internalItems[ 1 ] = 2;
> >    newItem.internalItems[ 2 ] = 3;
> >    newItem.internalItems[ 3 ] = 7;
> >    newItem.internalItems[ 4 ] = 9;
>
> >    return( newItem );
> >    }
>
> > void PrintItem( Item iItemToPrint )
> >    {
> >    cout << iItemToPrint.internalItems[0];
> >    }
>
> > int main ()
> >    {
> >    Item testItem = CreateItem();
>
> >    PrintItem( testItem );
>
> >    return 0;
> >    }
>
> > This is a specific question about a specific language issue.  Thank
> > You.
>
> This is one of the reasons copy constructors exist. ;) Think about
> which semantics you would like for a particular class (deep copy,
> shallow copy) and write a copy constructor accordingly.

Hmm... your array is statically allocated. No worry then.

--
Leandro T. C. Melo