我知道STL容器如vector
在添加对象时复制对象。 push_back
方法是这样的:STL容器如何复制对象?
void push_back (const T& x);
我很惊讶地看到,它需要的项目作为参考。我写了一个示例程序来了解它是如何工作的。
struct Foo
{
Foo()
{
std::cout << "Inside Foo constructor" << std::endl;
}
Foo(const Foo& f)
{
std::cout << "inside copy constructor" << std::endl;
}
};
Foo f;
std::vector<Foo> foos;
foos.push_back(f);
这将复制的对象,我可以看到它在调用拷贝构造。
我的问题是,当push_back
需要项目作为参考,它是如何调用复制构造?或者我在这里错过了什么?
任何想法..?
当T有一个无参数构造函数时,这是可以的。但是当它有一个参数化的构造函数时会发生什么?矢量如何初始化新对象? – 2009-11-07 13:45:52
当T有一个_copy constructor_时,这是可以的。默认情况下,如果你实现它,除非你明确地将其设置为'private'或'protected'。 – Thomas 2009-11-07 14:00:36
我编辑了我的答案以澄清。 – Thomas 2009-11-07 14:04:26