Re: Reference Member variables
smawsk wrote:
Hi,
I am writing a sample program to use a reference member variable. But
I was surprised to know that the below piece of code is not working as
I expected.
Can some one let me know what's wrong with this code?
class X
{
public:
X(int x) : ref(x)
{
}
void Display() const
{
cout<<ref<<endl;
}
private:
int& ref;
};
int main()
{
int c = 10;
X x(c);
x.Display(); // This function does not print 10. Instead some junk
value
return 0;
}
Why So? Am I missing some basic point regarding the working of
References here?
Thanks in advance....
Warm Regards.
A reference must be initialized from a reference or pointer object.
X::X(int) does not take a reference or pointer. What you are doing is
initializing X::ref with the address of "x" in X::X(int), which is
located in the stack frame of the function X::X(int) and which becomes
invalid when X::X(int) has completed execution. Consider the following:
int c = 10;
---
c |10 |
---
X x(c);
---
c |10 |
---
x |10 | <= Not the same address as c!
---
ref|&x | <= Not pointing to c!
---
// After execution of X x(c);
---
c |10 |
---
ref|? | <= The object "x" no longer exists! This references is invalid.
---
// ... You get the point.
What I think you intend to do is:
class X
{
public:
X(int& x) : _ref(&x) {}
~X(){}
int get()const{ return _ref: }
void print(){ std::cout<<get()<<std::endl; }
private:
X& operator=(const X& o){ return *this; }
int& _ref;
};
int main(int argc, char* argv[])
{
int c = 10;
X x(c);
x.print();
return 0;
}
{ Please convert tab characters to spaces before posting. -mod }
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]