智能指针
使用unique_ptr或者shared_ptr而不是new和delete
理由:避免资源泄漏
1、使用unique_ptr传递所有权
unique_ptr是最廉价的安全传递指针所有权的方式
// 不好
void foo()
{
char *msg = new char[16];
// fill msg
// 不明确发送消息缓冲区的所有权:
// 1、发送成功由send函数释放缓冲区
// 2、发送失败由使用者释放缓冲区
// 很容易混淆, 导致内存异常(内存泄漏或者重复释放)
int result = send(msg, 16);
if (result != 0) {
// 错误处理
delete[] msg;
}
}
// 好
void foo()
{
auto msg = std::make_unique<char[]>(16);
// fill msg
// 明确传递消息缓冲区的所有权,不存在内存泄漏、重复释放的风险
int result = send(std::move(msg), 16);
if (result != 0) {
// 错误处理
}
}
2、使用shared_ptr共享所有权
使用std::shared_ptr是实现共享所有权的标准方法,最后一个所有者删除对象