C11标准之前的auto_ptr
这个智能指针不被广泛使用的原因就是:在某些应用场景下,拷贝构造函数的意义不明确,同理赋值语句也是这个道理,意义同样不明确,因为C11标准之前并不存在移动赋值和移动构造的概念,还有就是之前谈到的一个对象和一组对象的问题,对于自定义类型而言,auto_ptr
的析构函数仅能够析构一个对象,不能够处理一组对象的情况,这些都是尚未解决的问题。
#include<iostream>
#include<functional>
#include<string>
#include<memory>using namespace std;
int main()
{
/* int* a = new int(10);auto_ptr<int>p1(a);auto_ptr<int>p2(a);cout << *p1 << endl;cout << *p2 << endl;*///这里的指针就会被释放两次 重复释放 所以被遗弃string* s1 = new string("aaaa");auto_ptr<string>ap3(s1);auto_ptr<string>ap4 ;ap4 = ap3;cout << *ap3 << endl;cout << *ap4 << endl;//这个顺序打印不出来 ,这个就是所有权转移问题 所以被遗弃//ap3赋值给ap4后就消失了return 0;
}