虽然不能拷贝或赋值unique_ptr,但可以通过调用release()/reset()函数将指针的所有权转移给另一个unique_ptr。 4.shared_ptr智能指针 常用的成员函数: get():返回指向变量的原始指针。 reset():重置智能指针,使它所持有的资源为空。 swap():交换两个智能指针所管理的资源。 use_count():返回智能指针所指向变量...
智能指针类型定义了一个名为get的函数,它返回一个内置指针,指向智能指针管理的对象。此函数是为了这样一种情况而设计的:我们需要向不能使用智能指针的代码传递一个内置指针。使用get返回的指针的代码不能delete此指针。虽然编译器不会给出错误信息,但将另一个智能指针也绑定到get返回的指针上是错误的: shared ptr<i...
get(); cout<<*p2<<endl; } 通过智能指针的.get()方法可以获得其原始指针,赋值回普通的指针类型。 当然也有一些问题要注意: void f3() { int *p0 = new int(1); shared_ptr<int> p1(p0); shared_ptr<int> p2(p0);//不行,因为两个智能指针都会进行析构操作,对同一个指针删除两次会出问题 ...
因为auto_ptr的析构函数中删除指针用的是delete,而不是delete [],所以我们不应该用auto_ptr来管理一个数组指针。 3) 构造函数的explicit关键词有效阻止从一个“裸”指针隐式转换成auto_ptr类型。 4) 因为C++保证删除一个空指针是安全的, 所以我们没有必要把析构函数写成: ~auto_ptr() throw() { if(ap) ...
调用析构函数时候,降低引用计数(若减为0。则删除基础对象); 实现智能指针有两种经典策略:一是引入辅助类,二是使用句柄类。 以下样例使用辅助类来实现: #include"iostream"usingnamespacestd;//定义一个普通类classbookClass{private:string name;intprice;public:intgetPrice(){returnprice;}};//辅助类classCounter...
Aircraft*myAircraft=pAircraft.get();// returns the raw pointer delete myAircraft;// myAircraft is gone } </aircraft> 一旦我们从这个共享指针中获取到对应的裸指针(myAircraft),我们可能会删掉它。然而,当这个函数结束后,共享指针pAircraft就会因为超出作用域而去试图删除myAircraft这个已经被删除过的对象,而...
shared_ptr<int>p(newint(12));int* q = p.get(); {shared_ptr<int>tmp(q); }//程序块结束后,q所指向的对象被释放intf = *p;//解指针p就会产生难以预料的结果cout<< f <<endl; 四,智能指针和异常 voidf(){shared_ptr<int>sp(newint(11));//假设抛出了异常,而且在f中未捕获}//函数结束后...
C++建立在C语言之上,自然也就离不开指针。我们在C++代码中,也可以看到大量的C指针和C++智能指针。了解了C的指针后,理解C++的中的智能指针便不在话下。 数据传递 C语言中有值传递和地址传递的概念。在介绍指针之前,我们先回顾下C语言中这2种数据传递的方式。 值传递:基本数据类型、结构体类型作为函数参数都是值...
如智能指针等。2、事后查错型。如泄漏检测工具。...,这个类可以帮我们自动析构智能指针,有效的避免了指针释放问题。...+98标准的,而C++11过后,对智能指针进行了大更新,新增了许多实用性指针。...unique_ptr指针 既然智能指针存在拷贝这种问题,那么就有一种简
(1)函数调用的自变量匹配规则 (2)隐式型别转换函数 (3)template functions的暗自具现化 (4)member function templates。我承认,这有点太深入了。 在智能指针中const和non-const之间的转化也是很大的学问,我看了Meyers使用unions来做实现。这不是我喜欢的做法,我觉得风险还是比较大的。