template <typename T>
class guard
{
private:
    T resource;
public:
    guard& operator=(guard &)=delete;
    guard(guard &)=delete;
    guard()=delete;
    guard(T temp):resource(temp){}
    ~guard(){delete resource;std::cout<<"free resource\n";}
};
int main()
{
         int *p= new int;
        guard<int*> guard_int(p);
        std::cin>>(*p);
        std::cout<<*p<<std::endl;  
        return 0;
 }

说明 禁止了拷贝和复制是防止在超出对象生命期的地方使用,禁止默认构造是防止随便释放资源。