Featured post
c++ - how to prevent calling virtual function in constructor or desturctor? -
some c++ materials mention can't call virtual function inside ctor or dtor,
(
 sorry ,i think it's better change to
 c++ materials mention we'd better not  call virtual function inside ctor or dtor,  
)
but may call them accidentally. there way prevent that?
for example:
# include < iostream >   using namespace std;    class cat   {   public:       cat(){ f();}       virtual void f(){cout<<"void cat:f()"<<std::endl;}   };    class smallcat :public cat   {   public:       smallcat():cat()       {       }       void f(){cout<<"void smallcat:f()"<<std::endl;}     };      int main()   {       smallcat sc;     }   output:
void cat::f()  //not expected!!! thanks
you need throw "c++ materials" garbage bin.
you can call virtual functions constructor or destructor. , job. need aware of language specification states virtual dispatch mechanism works in accordance current dynamic type of object, not final intended dynamic type. these types not same object under construction/destruction, confuses newbies when attempt invoke virtual functions constructors/destructors. nevertheless, calling virtual functions constructor , destructor useful feature of language, long know , how work in such cases. why want "prevent" it?
it saying division operator dangerous since 1 can divide zero, , asking how "prevent" use in program.
- Get link
- X
- Other Apps
Comments
Post a Comment