Re: std::vector and object copying
bb posted:
Hi,
...
std::vector<MyClass> v1;
v1.push_back(MyClass("abc"));
...
The above results in a single call to the 'copy constructor' of MyClass
when I use gcc. However, the same code results in 2 calls to the 'copy
constructor' when I use Visual C++ (VStudio 2005).
There's an optimization going on there. You can see where the second one is
coming from though:
std::vector<MyClass> v1;
MyClass object("abc");
v1.push_back(object); /* <- Results in copy-construction */
Here's some sample code that can create anywhere from 1 to 3 objects (or
maybe even 4?). First though, here's a handy class for testing:
class AnyClass {
public:
static unsigned times_constructor_called;
static unsigned times_copy_constructor_called;
static unsigned times_destructor_called;
static unsigned times_assignment_performed;
AnyClass()
{
++times_constructor_called;
}
AnyClass( const AnyClass & )
{
++times_copy_constructor_called;
}
AnyClass& operator=( const AnyClass & )
{
++times_assignment_performed;
return *this;
}
~AnyClass()
{
++times_destructor_called;
}
};
unsigned AnyClass::times_constructor_called = 0;
unsigned AnyClass::times_copy_constructor_called = 0;
unsigned AnyClass::times_destructor_called = 0;
unsigned AnyClass::times_assignment_performed = 0;
Now here's some code to try it out on:
AnyClass FuncReturnByValue()
{
AnyClass local_object;
return local_object;
}
int main()
{
AnyClass any_class = FuncReturnByValue();
}
-Tom1s