Are there any simple, effective answers to this?... aside from, "Decide which is more important", that is.
Let me elaborate. I want a fixed size array. It represents session slots that can be opened for a socket server to accept clients. There are a limited number of these (four, at present).
Perhaps from a C++ perspective my question is all wrong. Perhaps I should be considering these as session slots which, while filled with session objects, may not necessarily be usable until a given session has a reference to a connected TCP socket. This differs from most dynamic languages where I could simply specify the session slots as null until such time as a session fills that slot in the array.
speculating on tenfour's answer, this code would work, and is actually common:
It's not a pointer, but it's simple. pass the return by reference, and if you assigned it a value, return true. Otherwise, return false.
If you want an object with automatic storage that has optional semantics (i.e. may or may not exist), you can use
boost::optional
.boost::optional<T>
is a container that can have zero or one elements. If it is empty, it doesn't store aT
object, just like an empty vector doesn't store any object. In fact, you can think ofboost::optional<T>
as asstd::vector<T>
whose capacity is always 1 and cannot grow. And since the storage size required for this is fixed and known at compile-time (it'ssizeof(T)
),boost::optional
doesn't need any dynamic allocation.There's nothing preventing you from still using pointers. Pointers can point to any non-temporary objects, including ones that live on the stack.
Example: