请帮忙解读一下子这一段代码,关于智能指针原理的

请帮忙解读一下这一段代码,关于智能指针原理的


#include <iostream>



using namespace std;

template<class T>
class pmy
{
public:
pmy()
{

}
pmy(T *t)
{
p = t;
}
~pmy()
{
if (p != nullptr)
{
delete p;
}
}
//T operator *()
//{
// return *p;
//}

private:
T *p = nullptr;
};

class Test
{
public:
Test()
{
cout << "Test  create" << endl;
}
~Test()
{
cout << "Test delete" << endl;
}
};

void run()
{
pmy<Test> p =new Test; //这里为什么不能用pmy<Test> *p =new Test;或者pmy<Test*> p =new Test;
}

void main()
{
run();
cin.get();

}

------解决思路----------------------
pmy<Test> p =new Test; 会调用构造函数,new返回的正是构造函数所需要的东西

pmy<Test> *p =new Test 这个不行,因为你这只是申明了一个pmy类的指针而已(4字节),根本就没有对象诞生
pmy<Test*> p =new Test;这个不行,因为new返回的不是他构造函数所需要的参数类型,返回的是Test*,而他构造函数需要Text**

------解决思路----------------------
~pmy()里面调用 Test的析构
------解决思路----------------------
pmy<Test> p =new Test;  

<Test> 这里只是表示 模板 pmy中的T用Test来代替,故而不用加*。
怎么析构,则可以理解为把 T都替换为Test之后来理解,就是一般的指针指针。