Re: Why pointers?
On Feb 13, 5:11 pm, saneman <y...@dd.com> wrote:
past...@gmail.com wrote:
[8.6] When should I use references, and when should I use pointers?
http://www.parashift.com/c++-faq-lite/references.html#faq-8.6
Thanks but I was looking for some code sample that illustrates the
differences. In the below code 'test' takes a pointer to a list. But I
never use 'new' to make it work. Why would it ever be necessary to use
'new' when I can just pass the address to the list to 'test' using '&'?
What makes you think that pointers and new are related in any way?
To get back on topic, isn't the code below an example where a
reference is preferred over a pointer?
#include<iostream>
#include<list>
void test(std::list<int>* l) {
l->push_back(555);
}
Note the difference between:
std::list<int>* l; // pointer can be reseated
const std::list<int>* c_l; // same, any const list will do
std::list<int>* const c_l; // const pointer, can't be reseated, list
is mutable
const std::list<int>* const c_l_c;
Thats is, the above function should really have the following
signature if you absolutely must use a pointer:
void test(std::list<int>* const l) { ... } // pointer can't be
reseated
Which then makes the following better. Its intentions are clear to the
user:
void test(std::list<int>& l) { ... }
int main() {
std::list<int> l;
std::list<int>::iterator list_it;
l.push_back(1);
l.push_back(2);
l.push_back(3);
for (list_it = l.begin(); list_it != l.end(); list_it++) {
printf("%d\n",*list_it);
}
std::cout<<std::endl;
test(&l);
for (list_it = l.begin(); list_it != l.end(); list_it++) {
printf("%d\n",*list_it);
}
return 0;
}