Re: Trying to understand "&&"
???????? 01/01/2011 22:02, ??/?? SG ????????????:
On 1 Jan., 14:42, Chameleon<cham_...@hotmail.com> wrote:
class A
{
public:
A();
A(const char *string);
~A();
A(A&a);
The copy constructor usually takes a reference to a CONST.
Yes, Indeed.
A&& operator+(A&a) {
A b;
b.str = new char[strlen(this->str) + strlen(a.str) + 1];
This this->str as well as a.str could be null pointers couldn't they?
Of course. But it is a very very super fast sample. So I don't check
every case.
strcpy(b.str, this->str);
strcpy(b.str + strlen(this->str), a.str);
cout<< "A + A = "<< b.str<< endl;
return std::move(b);
}
A&& is a reference type. b is a function-local object. You're
returning a reference to a function-local object. This produces a
dangling reference. Using this dangling reference invokes undefined
behaviour. When in doubt, avoid declaring functions that return rvalue
references. This is almost always the wrong thing to do. Your operator
+ should "return an object by value". Also, if you return a function-
local object you should not use std::move as this inhibits a potential
copy/move elision.
Cheers!
SG
Thanks a lot!
After 8 years of C++ programming, I realize that return an object by
value, doen't invoke the D'tor of the function-local object.
Whow!!!
This is what I am trying to do, but it exists!.
So, the "&&" needed in case where you must put an object in a
vector<UberObjectClass>. Until now, I used vector<UberObjectClass*>.
Am I right??