C++ 万能指针void *实现任意类型的数据存储(下)

有抖音总共20秒的视频分成三段内味了。

好的,书接上文,如果传入的T data,本身是个临时对象,或者智能指针等等,有可能传过来不久就病逝了,那么咱们的void *指针就有问题了。

也没想到好的思路,暂时的唯一的解法就是拷贝一份数据data_copy,然后咱们咱们管理这个data_copy就可以了,data要死要活和咱噎没关系了,为了方便管理,同时把普通指针升级到智能指针。

那么怎么拷贝任意类型的数据呢?

在这里分三种情况,也可以看作是两种。对于普通变量,或者是对象,直接data_copy=data;赋值即可;对于指针,如果 data_copy=data ;实际上是将data_copy指向里data指向的区域,如果data指向的区域回收了,data_copy将因为非法访问而被拘留。其实对于指针,将其指向的数据进行赋值就可以了:

*data_copy = *data;

对于智能指针,也是类似的道理。

那么怎么判断一个变量,是不是指针呢?

还是用到了模板类的可变参数:

template<class T>
void copy(shared_ptr<T> v){
    cout<<"is a zhineng point"<<endl;
}
template<class T>
void copy(T* v){
    cout<<"is point"<<endl;
}
template<class T>
void c
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值