以下のコードがあり、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();
}