unique_ptr VS auto_ptr:为何unique_ptr更胜一筹?
在 C++ 11 标准之前,std::auto_ptr 是管理动态对象内存的首选工具。但自从引入 std::unique_ptr 后,它就成为了新时代的选择。事实上,unique_ptr 在许多方面优于 auto_ptr。
一、自定义删除器
自定义删除器是 unique_ptr 的一个显著优势。默认的 delete 可以清除堆分配的内存,但有时需要根据特定的需求清除内存。例如,当应用程序不像默认的 delete 那样释放资源时,则可以使用自定义删除器。此时,unique_ptr 可以帮助您做到这一点。下面示例演示了如何使用自定义删除器:
// 使用 lambdas 函数构建自定义删除器
auto customDeleter = [](int* ptr) {
std::cout << "Deleting memory pointed by ptr: " << *ptr << std::endl;
delete ptr;
};
// 构建 unique_ptr
std::unique_ptr<int, decltype(customDeleter)> ptr(new int(10), customDeleter);
在这里,lambda 函数 customDeleter 是一个简单的函数,它接受一个 int