std::vector does not independently call default constructors

Steven Scott steve_the_bayesian@yahoo.com
Tue May 16 05:23:00 GMT 2006


When I run the following code it looks like a std::vector<thing>(5) 
calls the default constructor for 'thing' once, then calls thing's copy 
constructor 4 more times.  This may not result in 5 default constructed 
'things'. 

g++ --version
g++ (GCC) 4.0.0
Copyright (C) 2005 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


#include <vector>
#include <iostream>

using namespace std;

typedef vector<double> dVector;
typedef unsigned int uint;

class vh{    // 'vector holder'
// compiler generated copy constructor copies pointer, which we want
// to have happen for efficiency reasons.
public:
  vh() : V(new dVector){}
  void push_back(double x){V->push_back(x);}
  uint size()const{return V->size();}
private:
  dVector * V;
};

int main(){
  vh x, y;
  x.push_back(1.0);
  y.push_back(2.0);
  cout << x.size() << endl;   // prints '1' the right answer

  vector<vh> v(2);    // should have two independent copies of vh's
  v[0].push_back(1.0);
  v[1].push_back(2.0);
  cout << v[0].size() << endl;   // prints '2' the wrong answer.
}



More information about the Gcc-help mailing list