I have the below code, and wrapped the Temple
object with a smart pointer. I understood
the concept, but what I did not understand is when the held object's destructor is invoked.
Even thought, i have not implemented ~mySmartPointer, the template destructor is invoked.
OUTPUT
Temple Constructor
Invoking pointer access operator
-- Welcome Temple
Invoking De-referencing Operator
-- Welcome Temple
Temple Destructor
Destructor is Invoked
Code
#include <iostream>
using namespace std;
template <typename T>
class mySmartPointer
{
private:
T *_object;
public:
explicit mySmartPointer(T * newObject) {
_object = newObject;
};
~mySmartPointer() { cout <<"Destructor is Invoked "<<endl;};
T operator *() {
cout <<" Invoking De-referencing Operator "<<endl;
return * _object;
};
T * operator ->() {
cout <<"Invoking pointer access operator "<<endl;
return _object;
};
};
class Temple
{
private:
int x,y;
public:
void printWelcome() {
cout <<"-- Welcome Temple "<<endl;
}
Temple() {
cout <<"Temple Constructor"<<endl;
}
~Temple() {
cout <<"Temple Destructor "<<endl;
}
};
int main(int argc, char ** argv) {
mySmartPointer<Temple> t (new Temple);
t->printWelcome();
(*t).printWelcome();
}