Nav*_*Nav 1 c++ inheritance destructor ctor-initializer
#include<iostream>
using namespace std;
class A
{
public:
int i;
A() {cout<<"A()"<<endl;}
~A() {cout<<"~A()"<<endl;}
};
class B:public A
{
public:
int j;
B(): j(10)
{
this->i=20;
this->~A();
}
};
int main()
{
B abc;
cout<<"i="<<abc.i<<" j="<<abc.j<<endl;
}//main
Run Code Online (Sandbox Code Playgroud)
两个问题:
有没有办法在B的构造函数中为A创建一个初始化列表?像这样的东西:
class B:public A
{
B(): j(10), A():i(20) {}
};
Run Code Online (Sandbox Code Playgroud)class A()
在B的构造函数的初始化列表中调用构造函数,如下所示:B(): A( .. ), ...
A* a = new B();
//..
delete a;
Run Code Online (Sandbox Code Playgroud)
会不会调用B的析构函数,除非class A
析构函数是虚拟的.这就是为什么不应该派生STL容器 - 他们的析构函数不是虚拟的.
析构函数就像你可以调用的任何其他普通函数一样(但除非你使用新的贴图,否则你不应该这样做).当你调用delete
一个对象时,会发生两件事:调用析构函数进行清理,然后operator delete
调用析构函数来释放为该对象分配的内存.这里第二步没有发生.
不,你不能这样称呼它.你可以做的是这样的事情:
A类{public:A(int n):i(n){}};
B级:公共A {public:B():A(20),j(10){}};