如何调用抽象 class 的 child 的析构函数?
How to call the destructor of a child of an abstract class?
我有一个纯抽象的class:
class Abstract{
void func1(arg1, arg2) = 0;
}
及其使用析构函数的实现:
class Concrete : public Abstract{
void func1(arg1,arg2) { /*implementation code..*/ };
~Concrete() {/*code for the destructor..*/}
在main.cpp中我为它创建了一个唯一的指针:
int main(){
std::unique_ptr<Abstract> class = std::make_unique<Concrete>();
//do operations with it
class.reset();
}
完成 class
后,我需要它调用其当前 implementation class
的(自定义)析构函数,但 .reset()
不会那样做。如何调用 Abstract
class 的这个实现的析构函数?
根据您的实施,您尚未将 Abstract Class
析构函数定义为虚拟。
So simple fix will be to make the destructor
of the Abstract Class
as virtual
.
因此 摘要 Class 的声明如下所示:
class Abstract{
public:
void func1(arg1, arg2) = 0;
virtual ~Abstract() {/*..Destrctor Body..*/}
}
现在是因为在 main.cpp
中,您使用 pointer of the Abstract Class
指向 Concrete Class
的对象,并且当您在抽象 class 的指针上执行了 reset()
,它将导致 destructor of only Abstract class
被调用。
但是一旦你创建了 destructor of the Abstract Class as Virtual
,它就会调用 Concrete Class 的**析构函数 **首先**** 然后是 destructor of the Abstract Class
将被调用。
更多细节我分享一个帖子供参考When Should we Use Virtual keyword ?
我有一个纯抽象的class:
class Abstract{
void func1(arg1, arg2) = 0;
}
及其使用析构函数的实现:
class Concrete : public Abstract{
void func1(arg1,arg2) { /*implementation code..*/ };
~Concrete() {/*code for the destructor..*/}
在main.cpp中我为它创建了一个唯一的指针:
int main(){
std::unique_ptr<Abstract> class = std::make_unique<Concrete>();
//do operations with it
class.reset();
}
完成 class
后,我需要它调用其当前 implementation class
的(自定义)析构函数,但 .reset()
不会那样做。如何调用 Abstract
class 的这个实现的析构函数?
根据您的实施,您尚未将 Abstract Class
析构函数定义为虚拟。
So simple fix will be to make the
destructor
of theAbstract Class
asvirtual
.
因此 摘要 Class 的声明如下所示:
class Abstract{
public:
void func1(arg1, arg2) = 0;
virtual ~Abstract() {/*..Destrctor Body..*/}
}
现在是因为在 main.cpp
中,您使用 pointer of the Abstract Class
指向 Concrete Class
的对象,并且当您在抽象 class 的指针上执行了 reset()
,它将导致 destructor of only Abstract class
被调用。
但是一旦你创建了 destructor of the Abstract Class as Virtual
,它就会调用 Concrete Class 的**析构函数 **首先**** 然后是 destructor of the Abstract Class
将被调用。
更多细节我分享一个帖子供参考When Should we Use Virtual keyword ?