Re: object copy with reference
On Sep 25, 1:43 pm, Philipp Kraus <philipp.kr...@flashpixx.de> wrote:
Hello,
I need a tip / hint for solving the following problem:
I have a class method that is run in different threads:
myclass::mythreadmethod( mysuperclass& )
mysuperclass is a reference variable, that is used during the thread is
running.
Anyway the method should be myclass::mythreadmethod( mysuperclass ), so t=
hat
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.
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.
The try to do it like
myclass::mythreadmethod( mysuperclass& pobj )
{
mysuperclass& lobj;
p_obj.clone(lobj);}
create the message l_obj isn't initializate.
Does anyone has some tips to create a working solution? The perfect solut=
ion
should be a deep-copy of the pobj reference
Thanks
Phil
How about making mysuperclass a pointer (or a smart pointer of some
kind), then you can initialize it to zero (or in the case of smart_ptr
it happens automatically). I'd use scoped_ptr in this case..., but as
example I'd this use a bald pointer...
struct MySuper
{
virtual MySuper* clone() const = 0;
//... rest of interface
//... lets not forget this...
virtual ~MySuper() = 0;
};
class Thread
{
public:
Thread();
~Thread();
void associate( MySuper& super );
private:
MySuper* super_;
};
//x.cpp
void Thread::associate( MySuper& super )
{
super_ = super.clone();
}
Thread::Thread()
: super_() //Don't forget this for bald pointers...
{ }
Thread::~Thread()
{
delete super_;
}