我正在使用指向派生類的指標進行一些練習,當我運行下面提供的代碼時,我得到的輸出是
Constructor A
Constructor B
Destructor A
有人能告訴我為什么 B::~B() 沒有在這里被呼叫嗎?
class A {
public:
A() { std::cout << "Constructor A\n"; }
~A() { std::cout << "Destructor A\n"; }
};
class B : public A {
public:
B() { std::cout << "Constructor B\n"; }
~B() { std::cout << "Destructor B\n"; }
};
int main() {
A* a = new B;
delete a;
}
uj5u.com熱心網友回復:
指標的靜態型別a
是A *
.
A* a = new B;
因此,在類中搜索所有使用此指標呼叫的成員函式A
。
要呼叫指標的動態型別的解構式,即類B
的解構式,您需要像virtual
在類中一樣宣告解構式A
。例如:
#include <iostream>
class A {
public:
A() { std::cout << "Constructor A\n"; }
virtual ~A() { std::cout << "Destructor A\n"; }
};
class B : public A {
public:
B() { std::cout << "Constructor B\n"; }
~B() override { std::cout << "Destructor B\n"; }
};
int main() {
A* a = new B;
delete a;
}
uj5u.com熱心網友回復:
因為被覆寫的方法需要是虛擬的
class A{
public:
A()
{
std::cout<<"Constructor A\n";
}
virtual ~A()
{
std::cout<<"Destructor A\n";
}
};
class B : public A{
public:
B()
{
std::cout<<"Constructor B\n";
}
virtual ~B()
{
std::cout<<"Destructor B\n";
}
};
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/440085.html