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


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

Re: object copy with reference

From Philipp Kraus <philipp.kraus@flashpixx.de>
Newsgroups comp.lang.c++
Subject Re: object copy with reference
Date 2011-09-25 17:59 +0200
Organization 1&1 Internet AG
Message-ID <j5nj5g$mj$1@online.de> (permalink)
References <j5n445$knm$1@online.de> <j5nb7f$rhs$1@dont-email.me>

Show all headers | View raw


On 2011-09-25 15:44:09 +0200, Victor Bazarov said:

> 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);
>     }

the marked => <= call is my problem, bevause mysuperclass is pure 
virtual, so I can't do exactly this. I would like to clone "o" 
(deep-copy) to a local
variable, but I know that o is a derivate object of mysuperclass. So I 
have add a pure virtual method "clone" to the superclass mysuperclass, 
that
must be implementated within the derivate class like:

mysuperclass& local_o = o.clone()

so local_o gets now a fully own reference to a new o object. The 
problem is the returning type of clone, if I return a mysuperclass& and 
do within
clone something like
mysuperclass& clone( void ){
    return myderivateclass;  // call the default constructor and 
returns the object with myderivateclass : public mysuperclass
}
the compiler breaks with the error temporary assignment, because the 
object is create on the local stack frame and after the clone the 
object is removed.

If I implementate the clone like
void clone( mysuperclass& ref) {
     ref = myderivateclass;
}

and call the clone in the context:
mythreadmethod( mysuperclass& o) {
     mysuperclass local_o;  //*
     o.clone(local_o);
}

the * creates the warning that local_o isn't initialisized, if I use a 
mysuperclass& the compiler create the error, that I can't use
an empty reference

Thanks

Phil

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