void f(destination &d /* 其它参数 */)
{
connection c = connect(&d);
shared_ptr<connection> p(&c, end_connection);
//使用链接
//当f退出时(即使由于异常而退出),connection 会被正确关闭
}
- 不使用相同的内置指针初始化(或reset)多个智能指针。
- 不delete get()返回的指针
- 不使用get()初始化或reset另一个智能指针。
- 如果使用get()返回的指针,记住当最后一个对应的智能指针销毁后,你的指针就变成无效了。
- 如果你使用智能指针管理资源而不是new分配内存,记住传递给它一个删除器(自己写释放函数 默认的是将其看做一块动态内存用delete释放。
void end_connection(connection *p) //这里是只能传入*p吗和 delete一样的数据类型?
{
disconnection(*p);
}
练习12.14:编写你自己版本的用shared_ptr管理connection的函数。