In my program I have a STL set.
set<string> myStrings;
To improve the efficiency of my code I changed it to hold, only pointers. (I don't need actual string copies to be stored.)
set<string*> myStrings;
I have read that it is a good practice to substitute pointers with references when possible. (Of course, only if the actual functionality of a pointer is not needed.)
set<string&> myStrings;
The latter one gives me a lot of compiler errors, though. Why is it not possible to use references as container elements?
It's much faster and memory-efficient to copy a reference than to copy many of the things a reference is likely to refer to. Pointers almost always point to data allocated on the heap. Pointers can be (and frequently are) null.
In C++, Reference variables are safer than pointers because reference variables must be initialized and they cannot be changed to refer to something else once they are initialized.
Pointers: A pointer is a variable that holds memory address of another variable. A pointer needs to be de referenced with * operator to access the memory location it points to.
References don't have their own addresses. Although references may be implemented as pointers, there is no need or guarantee of this. The C++ FAQ says it best: Unlike a pointer, once a reference is bound to an object, it can not be "reseated" to another object.
Containers store objects. References are not objects.
The C++11 specification clearly states (§23.2.1[container.requirements.general]/1):
Containers are objects that store other objects.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With