一、底層構造
struct _List_node_base
{
_List_node_base* _M_next;
_List_node_base* _M_prev;
};
template<typename _Tp>
struct _List_node
: public _List_node_base
{
_Tp _M_data;
};
二、析構&構造
注意:
base class 的 構造函數必須是virtual,否則出現undefined behavior!!!
兩種規則:
- 構造由內而外
- 析構由外而內
2.1構造由內而外
Derived的構造函數首先 調用Base的default構造函數,然後再執行自己
Derived::Derived(...): Base() { ... };
2.2析構由外而內
Derived的析構函數首先是執行自己,然後調用Base析構函數
Derived::~Derived(...) { ... ~Base(); }