在上面体现出来了,下面将使用unique_ptr解决这些问题。所以,C++11用更严谨的unique_ptr 取代了auto_ptr!unique_ptr 和 auto_ptr用法几乎一样,除了一些特殊。unique_ptr特性
时间: 2024-09-30 15:04:09 浏览: 36
C++11智能指针中的 unique_ptr实例详解
在C++11中,`unique_ptr`是一种智能指针,它取代了旧版的`auto_ptr`,主要是为了提供更好的内存管理。`unique_ptr`的特点包括:
1. 独占所有权:每个`unique_ptr`实例拥有并管理所指向的对象的唯一所有权,这意味着当你创建一个`unique_ptr`,其他`unique_ptr`或原始指针无法再访问该对象。这防止了潜在的悬垂指针问题。
2. 自动释放:当`unique_ptr`离开其作用域时,它会自动销毁其所持有的对象,无需显式删除。这对于避免内存泄漏非常有用。
3. 不支持拷贝:`unique_ptr`是不可复制的,但可以移动(move)。你可以通过`std::move`将所有权从一个`unique_ptr`转移到另一个,而不是复制对象。
4. 非空性保证:`unique_ptr`总是确保它指向的对象非空,如果尝试获取空指针,编译器会报错。
5. 内联删除:对于动态分配的对象,`unique_ptr`提供了内联删除操作,使得代码更简洁,效率也更高。
```cpp
// 使用例子
std::unique_ptr<int> ptr(new int(42)); // 创建并持有int对象
ptr = nullptr; // 移除所有权,对象会被析构
```
阅读全文