Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.c++ > #10461

Re: object copy with reference

From Victor Bazarov <v.bazarov@comcast.invalid>
Newsgroups comp.lang.c++
Subject Re: object copy with reference
Date 2011-09-25 09:44 -0400
Organization A noiseless patient Spider
Message-ID <j5nb7f$rhs$1@dont-email.me> (permalink)
References <j5n445$knm$1@online.de>

Show all headers | View raw


On 9/25/2011 7:43 AM, Philipp Kraus wrote:
> I have a class method that is run in different threads:
> myclass::mythreadmethod( mysuperclass& )

Is there any relationship between 'myclass' and 'mysuperclass'?

> mysuperclass is a reference variable, that is used during the thread is
> running.

OK, nothing strange here so far.

> Anyway the method should be myclass::mythreadmethod( mysuperclass ), so
> that
> each running thread has a own local copy of the object, but I can't
> switch the parameter
> because the method is derivated of another class.

So, the other class (from which your 'myclass' is derived) requires the 
argument to be a reference to a non-const object.  Seems OK.  You can 
implement your own

    myclass::mythreadmethod_impl(mysuperclass)

by overriding the 'mythreadmethod' this way:

    returntype myclass::mythreadmethod(mysuperclass& o)
    {
       mysuperclass local_o(o);
       return this->mythreadmethod_impl(local_o);
    }

(although, strictly speaking, the creation of local_o isn't necessary, 
it's done here just for illustrating the fact of copying the 'o').

>
> I need in the method a local (deep-copy) of my object. So I create a
> clone method like
> myclass::mythreadmethod( mysuperclass& pobj )
> {
> mysuperclass& lobj = p_obj.clone();
> }
>
> In this case I get the compiler error, that I try to set up a temporary
> assignment.

"Temporary assignment"?  What's that?

And what error do you get?

> The try to do it like
> myclass::mythreadmethod( mysuperclass& pobj )
> {
> mysuperclass& lobj;

You cannot declare a local object of type reference without initializing 
it.  That ought to be flagged by the compiler as an error.

> p_obj.clone(lobj);
> }
> create the message l_obj isn't initializate.
>
> Does anyone has some tips to create a working solution? The perfect
> solution
> should be a deep-copy of the pobj reference

See above.  It does depend, however, on how 'mysuperclass' is defined.

V
-- 
I do not respond to top-posted replies, please don't ask

Back to comp.lang.c++ | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

object copy with reference Philipp Kraus <philipp.kraus@flashpixx.de> - 2011-09-25 13:43 +0200
  Re: object copy with reference Victor Bazarov <v.bazarov@comcast.invalid> - 2011-09-25 09:44 -0400
    Re: object copy with reference Philipp Kraus <philipp.kraus@flashpixx.de> - 2011-09-25 16:25 +0200
    Re: object copy with reference Philipp Kraus <philipp.kraus@flashpixx.de> - 2011-09-25 17:59 +0200
      Re: object copy with reference Goran <goran.pusic@gmail.com> - 2011-09-26 00:27 -0700
      Re: object copy with reference Qi <no@no.no> - 2011-09-26 15:51 +0800
  Re: object copy with reference Werner <werasm@gmail.com> - 2011-09-26 01:26 -0700
    Re: object copy with reference Werner <werasm@gmail.com> - 2011-09-26 01:32 -0700
    Re: object copy with reference Philipp Kraus <philipp.kraus@flashpixx.de> - 2011-09-26 21:02 +0200
      Re: object copy with reference Werner <werasm@gmail.com> - 2011-09-26 23:34 -0700
        Re: object copy with reference Werner <werasm@gmail.com> - 2011-09-27 02:08 -0700
          Re: object copy with reference SG <s.gesemann@gmail.com> - 2011-09-27 04:10 -0700
            Re: object copy with reference Werner <werasm@gmail.com> - 2011-09-27 06:56 -0700

csiph-web