Effective C++ .14 智能指针的拷贝与deleter函数

时间:2022-04-19 18:47:56
#include <iostream>
#include <cstdlib>
#include <memory>
using namespace std; class Kiwi {
private:
int weight;
public:
Kiwi(int w) : weight(w) {}
~Kiwi() {
cout<<"~Kiwi"<<endl;
}
int getWeight() {return weight;}
}; void deleter(Kiwi* x) {
cout<<"deleting"<<endl;
// if remove below line object will not be delete by smart pointer
delete x;
} void driven() {
shared_ptr<Kiwi> p(new Kiwi(), deleter);
cout<<p->getWeight()<<endl;
cout<<p.use_count()<<endl; shared_ptr<Kiwi> q = p;
cout<<p->getWeight()<<endl;
cout<<q->getWeight()<<endl;
cout<<p.use_count()<<endl;
cout<<q.use_count()<<endl;
} int main() {
cout<<"test start"<<endl;
driven();
cout<<"test end"<<endl;
return ;
}

智能可以定义deleter函数,即在其认为资源应该释放时调用该函数来代替默认的delete操作