关于创建对象的一个小问题。比如说我有这两个类:
struct A{
A(){cout << "A() C-tor" << endl;}
~A(){cout << "~A() D-tor" << endl;}
};
struct B : public A{
B(){cout << "B() C-tor" << endl;}
~B(){cout << "~B() D-tor" << endl;}
A a;
};
在main函数中我创建了一个B
实例:
int main(){
B b;
}
请注意,B
继承自 A
并且也有一个类型为 A
的字段。
我正在尝试弄清楚规则。我知道在构造对象时首先调用其父级构造函数,反之亦然,在析构时同样如此。
那么字段呢(在这种情况下是 A a;
)?当创建 B
时,它何时调用 A
的构造函数?我没有定义初始化列表,是否有某种默认列表?如果没有默认列表呢?析构时同样的问题。
std::sort
是做什么用的呢? - TomB b
、B* b = new B(); delete b;
和A* a = new b(); delete a;
的构造和销毁过程(比较在析构函数中使用virtual
关键字时会发生什么,即virtual ~A() {cout<<"A D-tor"<<endl;}
)。 - Tom