1
クラスB
のオブジェクトを破棄したいとします。C++の仮想デストラクタから仮想メソッドを呼び出す
class A {
public:
A() {
std::cout << "construct A" << av::endl;
a = new int;
}
virtual ~A() {
std::cout << "destruct A" << av::endl;
this->clear();
}
virtual void clear() {
std::cout << "clear A" << av::endl;
delete a;
}
protected:
int *a;
};
class B : public A {
public:
B() {
std::cout << "construct B" << av::endl;
b = new int;
}
~B() {
std::cout << "destruct B" << av::endl;
}
void clear() override {
std::cout << "clear B" << av::endl;
delete b;
delete this->a;
}
private:
int *b;
};
そして、それはclear()
メソッドでやりたいと思います。しかし、私は次のコードを実行すると:
A *a = new B();
delete a;
を私が手:
はBが明確
そしてclear B
を破壊構築物Bの破壊を構築するには、印刷されることはありません。 私は何が間違っていますか?
"効果的なC++"について言及してくれてありがとう、私はその時間をもう一度やり直すべきだと思う。 – StahlRat