88问答网
所有问题
当前搜索:
析构函数不是虚函数
析构函数
为什么
是虚函数
?
答:
析构函数可以为虚函数,也可以不为虚函数
。(更多的时候不为虚函数)。设计析构函数为虚函数,主要是考虑到继承。析构函数(destructor) 与构造函数相反,当对象结束其生命周期,如对象所在的函数已调用完毕时,系统自动执行析构函数。析构函数往往用来做“清理善后” 的工作(例如在建立对象时用new开辟了...
构造、
析构函数
可否为virtual
答:
构造函数不能声明为虚函数,析构函数可以声明为虚函数,而且有时是必须声明为虚函数
。不建议在构造函数和析构函数里面调用虚函数。构造函数不能声明为虚函数的原因是:解释一:所谓虚函数就是多态情况下只执行一个。而从继承的概念来讲,总是要先构造父类对象,然后才能是子类对象。如果构造函数设为虚函...
基类的
析构函数不是虚函数
,会带来什么问题
答:
如果基类的
析构函数 不是虚函数
, 那么父类 指针 指向子类的时候, 删除分类指针的时候 子类不会被析构。 反之亦然
析构函数
⼀般写成
虚函数
的原因
答:
析构函数通常被设计为虚函数
,其核心原因是防止内存泄漏问题的发生。当基类指针指向派生类对象时,如果没有将析构函数声明为虚函数,那么在释放对象时,编译器会根据指针类型执行基类的析构函数,导致派生类特有的数据成员可能无法被正确释放,从而造成内存泄漏。通过将析构函数设为虚函数,编译器可以根据实...
为什么C++的构造
函数不
可以
是虚函数
,而
析构函数
可以是虚函数
答:
相反,
析构函数可以是虚函数
,因为其在删除指针时无论指向基类还是派生类,都会根据类型调用相应的析构函数,这有助于避免资源泄漏。C++不将析构函数设为默认虚函数,考虑了虚函数表的开销和类型兼容性。使用shared_ptr等智能指针可以进一步简化资源管理,确保对象生命周期结束后自动释放内存。
为什么C++的构造
函数不
可以
是虚函数
,而
析构
答:
③构造函数不需要是虚函数,也不允许是虚函数,因为创建一个对象时我们总是要明确指定对象的类型,尽管我们可能通过实验室的基类的指针或引用去访问它。但析构却不一定,我们往往通过基类的指针来销毁对象。这时候如果
析构函数不是虚函数
,就不能正确识别对象类型从而不能正确调用析构函数。④从实现上看...
c++什么
是虚函数
,构造与
析构函数
可以是虚函数吗?
答:
//这就是虚函数奇妙之所在,一般函数是作不到的,对于一般的函数调用 //的函数在编译时就确定了。假如f是
非虚函数
,那么永远调用的是A::f()//因为p是A*类型 return 0;} 构造
函数不
能是虚函数,而
析构函数
在某些情况下必须为虚函数(比如你想让你类能够被继承,那么这个类的析构函数最好是虚...
为什么基类中的析构函数要声明
为虚析构函数
答:
用对象指针来调用一个函数,有以下两种情况:如果是虚函数,会调用派生类中的版本。如果是
非虚函数
,会调用指针所指类型的实现版本。
析构函数
也会遵循以上两种情况,因为析构函数也是函数嘛,不要把它看得太特殊。 当对象出了作用域或是我们删除对象指针,析构函数就会被调用。当派生类对象出了作用域,...
c++中
析构函数
中可以调用
虚函数
么
答:
c++中
析构函数
中不可以调用
虚函数
。effective C++ 中有这样的描述:同样的原因也适用于析构过程。一旦派生类析构函数运行,这个对象的派生类数据成员就被视为未定义的值,所以 C++ 就将它们视为不再存在。C++中派生类在构造时会先调用基类的构造函数再调用派生类的构造函数,析构时则相反,先调用派生...
C++ 为什么将
析构函数
定义
为
纯
虚函数
编译器报错一个无法解析的外部指令...
答:
这个
函数不
可以是纯
虚函数
。道理也不难理解,每个类都要为自己对象的析构自己负责,也就是说必须正确析构自己类的对象,没有其他类会为你的析构负责。所以你需要给Worker的
析构函数
提供一个实现,例如:Worker::~Worker(){} 函数体里可以啥也没有,这样就可以通过编译了。
1
2
3
4
5
6
7
8
9
10
涓嬩竴椤
灏鹃〉
其他人还搜
构造函数和析构函数都可以是虚函数
析构函数可以是虚函数
为什么基类的析构函数是虚函数
基类析构函数可以是非虚函数
构造函数不能是虚函数
析构函数可以声明为虚函数
为什么析构函数要定义成虚函数
析构函数纯虚函数
构造函数和析构函数