Pages

2008年10月17日 星期五

C++ STL 容器的建(解)構

最近複習 STL,使用時發現一個現象,這邊我以 vector 為例來描述:
##ReadMore##
#include <iostream>
#include <vector>

using namespace std;

struct Foo {
    Foo() {
        cout << "Constructed" << endl;
    }

    ~Foo() {
        cout << "Destructed" << endl;
    }
};

int main() {
    vector<Foo> data(3);
    return 0;
}
跑出來的結果如下所示:
Constructed
Destructed
Destructed
Destructed
Destructed

從輸出的結果我們可以發現,vector的建構子會先建構出一個 FOO 類別的實體,接著再將內容複製三份至容器中,所以 vector data(3); 這一行敘述相當於 FOO foo; vector data(3,foo);。其實,C++ 容器都是以複製的方式來做建構,如:list、deque..,etc。不過搞不太懂是如何實作XD!有空再想想看好了。

沒有留言:

 
Blogger Templates