C++ Virtual Inheritance -


#include <stdio.h>   class abc{     public:         abc     *next;      protected:         int             flags;         const char *    name;         const char *    comments;      public:         abc(const char *name, const char *comments, int flags);          virtual ~abc() {             printf("\nreached @ virtual ~abc\n");             printf("returning @ virtual ~abc\n");         }    };  class def: public abc{     public:         def (const char *myname, const char *mycomments,                int myflags): abc(myname, mycomments, myflags)         {             printf("\nreached @ def\n");             printf("name=%s; comments=%s\n", myname, mycomments);             printf("returning def\n");         } };  class ghi: public def{     public:         ghi(const char *myname2, const char *mycomments2,              int myflags2): def(myname2, mycomments2, myflags2)         {             printf("\nreached @ ghi\n");             printf("name=%s; comments=%s\n", myname2, mycomments2);             printf("returning ghi\n");         } };  class jkl: public def{     public:         jkl(const char *myname2, const char *mycomments2,              int myflags2): def(myname2, mycomments2, myflags2)         {             printf("\nreached @ ghi\n");             printf("name=%s; comments=%s\n", myname2, mycomments2);             printf("returning ghi\n");         } };  ghi myvar("myvar", "testing it", 0); jkl myvar2("myvar2", "testing again", 0);  abc::abc(const char *name, const char *comments, int flags) : next(0){     printf("\nreached @ abc::abc\n");     printf("name=%s; comments=%s\n", name, comments);     printf("returning abc:abc\n"); }    int main(void){     printf("\nrunning main function\n");     printf("ending main function\n");     return 0; } 

the output:

reached @ abc::abc name=myvar; comments=testing returning abc:abc  reached @ def name=myvar; comments=testing returning def  reached @ ghi name=myvar; comments=testing returning ghi  reached @ abc::abc name=myvar2; comments=testing again returning abc:abc  reached @ def name=myvar2; comments=testing again returning def  reached @ ghi name=myvar2; comments=testing again returning ghi  running main function ending main function  reached @ virtual ~abc returning @ virtual ~abc  reached @ virtual ~abc returning @ virtual ~abc 

i don't understand:

  • how function virtual ~abc called?
  • why running @ end of program?
  • what purpose of function?

~abc destructor of abc. it's function that's there destroy object when isn't needed anymore.

at end of program every object destroyed, program calls every destructor. defined destructor print lines, does.

also, every object in tree inherits abc, inherit destructor. declare 2 object, ghi , jkl. have destroyed @ end of program, call destructor inherited abc.

destructors used destroy objects in custom ways no memory leaked. example, if object has pointer else in it, set pointer nullptr safety.

note every object has default destructor, doesn't print default, that's why didn't know existed.


Comments

Popular posts from this blog

jOOQ update returning clause with Oracle -

java - Warning equals/hashCode on @Data annotation lombok with inheritance -

java - BasicPathUsageException: Cannot join to attribute of basic type -