我偶然发现Stack Overflow上的这篇文章: make shared_ptr not use delete
我从Nicolai M. Josuttis的C ++标准库书中得到了一个相关的问题。以下是本书的以下代码:
#include <string>
#include <fstream> // for ofstream
#include <memory> // for shared_ptr
#include <cstdio> // for 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 and open temporary file:
std::shared_ptr<std::ofstream> fp(new std::ofstream("tmpfile.txt"),
FileDeleter("tmpfile.txt"));
//...
}
我理解删除函数的签名应该是以下内容:
void Deleter(T* p)
所以在上面的例子中,如何删除函数(指定为FileDeleter(&#34; tmpfile.txt&#34;))看起来是类的构造函数调用而不是具有上述格式的函数?如何在破坏共享指针时实际调用删除函数?
答案 0 :(得分:1)
FileDeleter("tmpfile.txt")
创建一个删除对象以传递给共享指针。
共享指针的实现将这个副本存储为变量,以及托管对象,沿着
行。std::ofstream * object;
FileDeleter deleter;
共享指针的析构函数将以
的形式调用它deleter(object);
将调用删除器的重载operator()
,删除对象并删除文件。