auto_ptr和shared_ptr
时间: 2024-01-23 15:14:22 浏览: 90
shared_ptr
auto_ptr是C++98中提供的智能指针之一,它具有独占所有权的特性。auto_ptr在拥有对象的同时,也负责释放对象的内存。然而,auto_ptr存在潜在的内存崩溃问题,因为它在拷贝构造和赋值操作时会转移所有权,导致原始指针变为null。这意味着如果多个auto_ptr指向同一个对象,会导致程序崩溃。
shared_ptr是C++11中引入的智能指针,它解决了auto_ptr的局限性。shared_ptr使用引用计数的机制来管理对象的所有权,多个shared_ptr可以指向同一个对象,对象和相关资源会在最后一个引用被销毁时释放。shared_ptr通过引用计数来跟踪对象的引用数量,当引用计数为0时,对象会被销毁。
shared_ptr的引用计数代理对象包括一个真正的引用计数对象,它包含一个虚表、一个虚表指针和两个计数器。这些额外的数据会增加shared_ptr的内存开销。
下面是一个使用auto_ptr和shared_ptr的示例:
```cpp
#include <iostream>
#include <memory>
int main() {
// 使用auto_ptr
std::auto_ptr<int> autoPtr(new int(10));
std::cout << *autoPtr << std::endl; // 输出:10
// 使用shared_ptr
std::shared_ptr<int> sharedPtr(new int(20));
std::cout << *sharedPtr << std::endl; // 输出:20
return 0;
}
```
阅读全文