Is this possible...

  • Thread starter Thread starter craig
  • Start date Start date
C

craig

Assume that you have a User object, which abstracts an authenticated user of
your application. It has some properties such as UserID, FirstName,
LastName, etc. and a method LogOut(); The LogOut method logs the user out
of the application. If the LogOut() method is successful, the user is
logged out and the User object should no longer be valid. Is there a way to
allow the LogOut() method to force the reference that is being held to the
object to which it is a member (User) to be set to null?

If not, I can force the object to return empty values for all properties
after the LogOut() method has been successfully executed. But I was just
wondering if it might be possible to actually blow away the object itself.

Thanks!!
 
No, an object cannot set itself to null.

You could return empty values but it might be better to throw an exception.
 
don't throw an exception, instead of calling log out, set it to null anyway.
Then in the finalize method, put the code that has to happen on logout, so
it will be executed anyway.
 
I don't if this will fit in with your existing code,
but you could declare the LogOut method as a static member
of your class and pass the object that is to be logged
out as a ref parameter (doing all that has to be done,
and nulling the parameter at the end).

Willem van Rumpt
 
One other option is to seperate the data about the user from the class that
manages the authorization (like .NET does).

So, have one class that holds the user id, first name, last name, etc. Have
another with "login" and "logout" static methods and a method
("getuserdata") to return the current user's data object.

Logging in would be a matter of
loginmgr.login(userid, password)

User data would come from
userdata = loginmgr.getuserdata()

Logging out would be
loginmgr.logout()

At this point, calling getuserdata() raises an exception.

Since userdata is readily available from calling the static method, you
wouldn't need to pass it around as an object. Good design will dictate that
the data can stay around only as long as it is needed, and not one second
more.

HTH,
--- Nick
 
Back
Top