If 'A' is not copyable and assignable, you are left with no choice but to use the pointer to 'A'.If 'A' is not copyable and assignable, you are left with no choice but to use the pointer to 'A'.
Assuming however that 'A' is copyable and assignable, then the choice would be guided by factors including but not limited to:
a) Do you really want the container / algorithms to operate on a separate copy rather than the original object (through pointer)
b) What is the performance penalty of copying?
c) Do you want to store polymorphic objects in the container using the pointer approach?
I guess RValue references of C++0x have some relief to offer in point (a) and (b) but I am not sure.