a.提供给客户的接口,最好能在编译器就检查出错误。例如给参数限定有限制的类型。
b.自定义类型的接口尽量与内置类型兼容,降低客户理解成本和出错风险。
c.接口如果要求客户记住某件事,那么这个接口就有着“不正确使用”的倾向,因为客户很可能会忘记那件事。
例如,指向数组的只能指针的例子,下面的写法有两个要点:
1.返回的是智能指针,不需要客户去delete。
2.返回的智能指针带了特定的delete参数,保证会正常释放该指针。
class Test
{
// 有动态申请内存操作
};
std::shared_ptr<Test> test()
{
std::shared_ptr<Test> p{ new Test[10], std::default_delete<Test[]>() };
return p;
}
int main()
{
std::shared_ptr<Test> p{ test() };
return 0;
}
结论:
a.好的接口很容易被正确使用,不容易被误用。
b.“促进正确使用”的办法包括接口的一致性,以及与内置类型的行为兼容。
c.“阻止误用”的把那包括建立新的类型、限制类型上的操作,束缚对象值,以及消除客户的资源管理责任。
d.shared_prt支持定制删除器。这可防范跨DLL问题,可被用来自动解除互斥锁。