#include <iostream>#include<cstdlib>#include<memory>using namespacestd;classKiwi {Private: intweight; Public: Kiwi (intW): Weight (w) {}~Kiwi () {cout<<"~kiwi"<<Endl; } intGetweight () {returnweight;}};voidDeleter (kiwi*x) {cout<<"deleting"<<Endl; //if remove below line object is not being delete by smart pointerdelete x;}voiddriven () {shared_ptr<Kiwi> P (NewKiwi ( -), 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;}intMain () {cout<<"Test Start"<<Endl; Driven (); cout<<"Test End"<<Endl; return 0;}
Smart can define the Deleter function, which is called when it thinks the resource should be freed instead of the default delete operation
Effective C + +. 14 Copy of smart pointer and deleter function