Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.c++ > #10475
| 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> |
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
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