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-lit...s.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;
>
> }