The following program results in undefined behavior.
#include <iostream>
using namespace std;
class A {
public:
A()
{
cout << "Constructing A\n";
}
~A()
{
cout<< "Destructing A\n";
}
};
class B: public A {
public:
B()
{
cout << "Constructing B\n";
}
~B()
{
cout << "Destructing B\n";
}
};
int main()
{
B *d = new B();
A *b = d;
delete b;
getchar();
return 0;
}
Constructing A
Constructing B
Destructing A
Making the base class destructor virtual ensures that the object of the derived class is properly destructed, i.e., both the base class and the derived class destructors are called.
#include <iostream>
using namespace std;
class A {
public:
A()
{
cout << "Constructing A\n";
}
virtual ~A()
{
cout<< "Destructing A\n";
}
};
class B: public A {
public:
B()
{
cout << "Constructing B\n";
}
virtual ~B()
{
cout << "Destructing B\n";
}
};
int main()
{
B *d = new B();
A *b = d;
delete b;
getchar();
return 0;
}
Constructing A
Constructing B
Destructing B
Destructing A
#include <iostream>
using namespace std;
class A {
public:
virtual ~A() = 0;
// Pure virtual destructor
};
A::~A() // Explicit destructor call
{
std::cout << "Pure virtual destructor is called";
}
class B : public A {
public:
~B() { cout << "~B() is executed"; }
};
int main()
{
A* b = new B();
delete b;
return 0;
}
~B() is executed
Pure virtual destructor is called
Note: also read about Pure Virtual Functions and Abstract Classes
Please follow me to read my latest post on programming and technology if you like my post.
https://www.instagram.com/coderz.py/
https://www.facebook.com/coderz.py
Staying up to the mark is what defines me. Hi all! I’m Rabecca Fatima a keen learner, great enthusiast, ready to take new challenges as stepping stones towards flying colors.
Problem Statement: Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses. Example…
Given an integer A. Compute and return the square root of A. If A is…
Given a zero-based permutation nums (0-indexed), build an array ans of the same length where…
A heap is a specialized tree-based data structure that satisfies the heap property. It is…
What is the Lowest Common Ancestor? In a tree, the lowest common ancestor (LCA) of…