Re: Assignment operator=/copy constructor/temporaries, BROKEN!
Fabrizio J Bonsignore wrote:
I want this to be compilable and working AS IS:
I made a few minor changes, but seems to compile, link and run.
class AO
{
public:
int i;
void Aha();// {i=1;}
AO &operator=(AO &x);// {i=x.i; return *this;}//should not matter if
inline or not
What is the concern about the assignment operator being inline?
AO();// : i(0) {}
AO(AO &x);// {i=x.i;}
virtual ~AO();// {}
virtual? Why?
};
void AO::Aha() {
i=1;
}
AO::AO()
: i(0) {
}
AO::AO(AO &x) {
i=x.i;
}
AO::AO(const AO &x)
:
i(x.i)
{}
I prefer my copy ctors to have const arguments and I prefer an
initialization list.
AO &AO::operator=(AO &x) {
i=x.i;
return *this;
}
AO::~AO() {}
class BO
{
AO a;
public:
AO Retit();// {++a.i; return a;}
AO Retut();// {AO z; z.i = 10; return z;}
BO();
};
BO::BO() {
BO::BO()
:
a()
{
AO b;
b = a;
AO c(a);
AO d(b);
AO e(c);
a.Aha();
b.Aha();
c.Aha();
d.Aha();
e.Aha();
AO m = Retit();
AO n = Retit();
AO o(Retit());
AO p = n;
AO q = o;
AO f;
AO g = Retut();
AO h(Retut());
AO j = g;
AO k = h;
f = Retit();
f = Retut();
}
AO BO::Retit() {
++a.i;
return a;
}
I think I'm somewhat missing the point of what you want to do. That code
is going to call a copy ctor. Is that what you want?
AO BO::Retut() {
AO z;
z.i = 10;
return z;
}
BO testbo;
Does the compiler you're using have some sort of optimization flag?
Perhaps it's trying to optimize too much?
What compilation error messages, linkage errors, or runtime errors are
you getting?
Again, can you please tell us what compiler you are using and post a
small complete example that demonstrates the problem you are having.
LR