[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.c++

Overloaded operator with templated classes

sam.barker0

10/12/2008 7:11:00 AM

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>::operator=(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
3 Answers

Kai-Uwe Bux

10/12/2008 7:27:00 AM

0

sam.barker0@gmail.com wrote:

> 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

sam.barker0

10/12/2008 7:42:00 AM

0

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,
Jegan

sam.barker0

10/12/2008 7:45:00 AM

0

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