我有下面的代码,并用Temple
智能指针包装了对象。我理解了这个概念,但我不明白的是何时调用了持有对象的析构函数。
甚至想,我还没有实现~mySmartPointer,模板析构函数被调用了。
输出
寺庙建造者
调用指针访问运算符
——迎宾寺
调用取消引用运算符
——迎宾寺
神殿破坏者
调用析构函数
代码
#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();
}