Overloaded operator with templated classes

S

sam.barker0

Hi,

I have designed a class with an overloaded = operator.

The problem is that

whenever I invoke the method
like

const myclass<char> astring=another_object;

my overloaded gets invoked and everything is fine.

but if I write

const myclass<char>& astring=another_object;

I guess the synthesised overload function takes place instead of my
overloaded function.

astring is a shallow copy of another_object.


My overloaded method is defined as

template<typename T>
myclass<T>& myclass<T>::eek:perator=(const myclass<T>& rhs)
{

if(this != &rhs)
{
//free the allocated memory

//allocate again
this->var1=rhs.var1;
this->head=rhs.head;
//call another method
recursively_copy(head,rhs.head);

}
return *this;

}


Why is this happening
Cheers,
Sam
 
K

Kai-Uwe Bux

Hi,

I have designed a class with an overloaded = operator.

The problem is that

whenever I invoke the method
like

const myclass<char> astring=another_object;

my overloaded gets invoked and everything is fine.

That should not invoke the assignment operator but a constructor. What you
do is copy-initialization and unrelated to assignment.

but if I write

const myclass<char>& astring=another_object;

That initializes a reference. The rules are in [8.5.3]. What matters here is
that there is no requirement that a copy of the object is created.

I guess the synthesised overload function takes place instead of my
overloaded function.

No, that does not happen.
astring is a shallow copy of another_object.

No, but it might look that way. Very likely, it _is_ your object.


[snip]

BTW: is there any reason not to use std::string as your string class (just
guessing from the names)?


Best

Kai-Uwe Bux
 
S

sam.barker0

Thanks Kai.It makes sense.That line should do copy initialisation.
That initializes a reference. The rules are in [8.5.3]. What matters here is
that there is no requirement that a copy of the object is created.


Yep what you say is correct.There is no requirement for a copy of the
object.

Cheers,
Jegan
 
S

sam.barker0

Thanks Kai.It makes sense.That line should do copy initialisation.
const myclass<char>& astring=another_object;
That initializes a reference. The rules are in [8.5.3]. What matters here is
that there is no requirement that a copy of the object is created.

Yep what you say is correct.There is no requirement for a copy of the
object.

Cheers,
Sam
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,955
Messages
2,570,117
Members
46,705
Latest member
v_darius

Latest Threads

Top