unique_ptr与shared_ptr 区别
时间: 2023-10-08 15:04:53 浏览: 87
唯一指针(unique_ptr)是C++11新标准引入的一个智能指针,它管理着动态分配的对象的生命周期,它是独占式所有权,即同一时刻只能有一个unique_ptr指向该对象。
而共享指针(shared_ptr)也是一个智能指针,它管理着动态分配的对象的生命周期,但它是共享式所有权,即多个shared_ptr可以同时指向同一个对象,该对象会在最后一个shared_ptr离开作用域时销毁。
相关问题
14.以下哪些不是C++ STL提供的智能指针? A sudo_ptr B week_ptr C shared_ptr D unique_ptr
C++ STL提供的智能指针有auto_ptr、shared_ptr和unique_ptr,而sudo_ptr和week_ptr不是C++ STL提供的智能指针。其中,auto_ptr已经被C++11标准废弃,建议使用unique_ptr代替。shared_ptr和unique_ptr都是C++ STL提供的智能指针,其中shared_ptr采用引用计数的方式管理内存,而unique_ptr采用独占式的方式管理内存,即同一时间只能有一个unique_ptr指向某个对象。下面是一个unique_ptr的例子:
```cpp
#include <iostream>
#include <memory>
int main() {
std::unique_ptr<int> p(new int(42));
std::cout << *p << std::endl; // 输出:42
*p = 24;
std::cout << *p << std::endl; // 输出:24
return 0;
}
```
auto_ptr、unique_ptr、shared_ptr
auto_ptr、unique_ptr和shared_ptr都是C++中的智能指针,用于管理动态分配的内存,避免内存泄漏和悬空指针的问题。
1. auto_ptr是C++98标准引入的智能指针,它拥有对动态分配对象的唯一所有权。当auto_ptr被销毁时,它会自动释放所管理的对象。然而,auto_ptr存在一些问题,比如不能正确处理数组和不支持复制构造函数,因此在C++11标准中已经被废弃。
2. unique_ptr是C++11标准引入的智能指针,它也拥有对动态分配对象的唯一所有权。与auto_ptr不同,unique_ptr提供了更好的语义安全性和性能。它支持数组和自定义删除器,并且可以通过移动语义来转移所有权。当unique_ptr被销毁时,它会自动释放所管理的对象。
3. shared_ptr也是C++11标准引入的智能指针,它允许多个shared_ptr共享对同一个对象的所有权。shared_ptr使用引用计数来跟踪有多少个shared_ptr指向同一个对象,并在最后一个shared_ptr被销毁时释放对象。shared_ptr还支持自定义删除器和数组。然而,shared_ptr存在循环引用的问题,可能导致内存泄漏,可以通过weak_ptr来解决这个问题。
阅读全文