参考网址
元<型名 T>类 独包 止{
独针<T>h;//包装一个
空 检查()常{
如(h==空针)抛 无效实参("无效");
如(h->错误)抛 无效实参(h->错误串);
}//这是h内部有`错误`.
公:
T()=删;
T(常 T&)=删;
T&符号=(常 T&)=删;
//其余皆删
T(T&&)=默认;
T&符号=(T&&)=默认;
//只能移动
T(T*o):h(o){}//保存指针
符号 极(){中 h!=空针&&!h->错误;}
T*符号()(){中 取();}
//重载(),就是取(),多了检查步骤
T*取(){检查();中 h.取();}//取原指针
//多加了一步检查
极 符号==(常 T&o)常{中 o.h==h;}
极 符号!=(常 T&o)常{中 o.h!=h;}
T*符号->()常{检查();中 h.取();}
//重载->,这里也多检查了一步
};
//只多做一步,类似这里的`检查`,但就得重新写类.
内联 独包<环境>安连接(常 符*ip,整 端口){
中 连接(ip,端口);
}//原来直接返回(环境*),现在用`独针<环境>`了.
空 主(){
动 c=安连接(ip,端口);
回复 r=命令(c(),"取标识");
//这个命令也得用相应的安全版本.
打印(r->串);
}//通过RAII保证安全,重载指针访问符保证方便,访问指针时做检查保证不出错,避免外部检查.还可加额外控制策略如写日志.