我知道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