/*
scoped_ptr的实现
和auto_ptr的区别就是,拷贝构造函数声明成了私有的,这样管理权就不会转让了。
还有一个scoped_ptr,区别在于指针指向的是数组的,不能重载->,改成operator [],按照数组方式去读。
*/
#include<bits/stdc++.h>
using namespace std;
namespace P{
template <typename T>
class Scoped_ptr{
public:
Scoped_ptr(T *da){
s=da;
}
T& operator*(){
return *s;
}
T* operator->(){
return s;
}
~Scoped_ptr(){
if(s!=NULL){
cout<<"调用析构"<<endl;
delete(s);
}
}
protected:
T *s;
//还可以在这里加一个标记,判断属不属于自己,结果一致。
private:
Scoped_ptr(Scoped_ptr &da);
};
}
//auto_ptr缺点很明显,管理权交给别人之后,自己指向为空。
struct node{
int p;
};
int main(){
using namespace P;
int *da=new int(10);
Scoped_ptr<node> a(new node{1});
//Scoped_ptr<node> b(a); //这个就会报错了,因为不能拷贝构造。
return 0;
}
scoped_ptr简单实现
猜你喜欢
转载自blog.csdn.net/weixin_41033366/article/details/105238847
今日推荐
周排行