Monday 15 February 2010

c++ - Calling custom deleter class member function for shared pointer -



c++ - Calling custom deleter class member function for shared pointer -

i happened stumble upon post on stack overflow: make shared_ptr not utilize delete

and have related question c++ standard library book nicolai m. josuttis. below next piece of code book:

#include <string> #include <fstream> // ofstream #include <memory> // shared_ptr #include <cstdio> // remove() class filedeleter { private: std::string filename; public: filedeleter (const std::string& fn) : filename(fn) { } void operator () (std::ofstream* fp) { delete fp; // close file std::remove(filename.c_str()); // delete file } }; int main() { // create , open temporary file: std::shared_ptr<std::ofstream> fp(new std::ofstream("tmpfile.txt"), filedeleter("tmpfile.txt")); //... }

i understand signature of deleter function should of next :

void deleter(t* p)

so in above example, how deleter function (specified filedeleter("tmpfile.txt")) looks constructor phone call class rather function above format? how deleter function invoked on destruction of shared pointer here?

filedeleter("tmpfile.txt") creates deleter object pass shared pointer.

the shared pointer's implementation stores re-create somewhere variable, managed object, along lines of

std::ofstream * object; filedeleter deleter;

the shared pointer's destructor invoke as

deleter(object);

which phone call deleter's overloaded operator(), deleting object , removing file.

c++

No comments:

Post a Comment