C++ 智能指针关联文件指针以及删除器的用法
平时我们在学习和使用 C++ 的时候,在用到智能指针时,经常会有一种固化的思维:智能指针就像 new 和 melloc 一样,用于分配动态内存空间,然后智能指针再指向这个空间。其实智能指针不一定非要和内存关联。智能指针与普通指针一样,也可以和文件指针关联,也可以和网络套接字关联,不要局限于内存。下面就举一个小例子。
我们先创建一个文本文件 sentence.txt。其内容为:Talk is cheap. Show me your code.
再创建一个 C++ 源文件 example.cpp。
#include <iostream>
#include <memory>using namespace std;void close(FILE *fp)
{if(fp == nullptr)return;elsefclose(fp);cout << "File close" << endl;
}int main(void)
{FILE *fp {fopen("sentence.txt", "w")};// 初始化智能指针的同时定义一个删除器shared_ptr<FILE> file_ptr {fp, close};return 0;
}
我们在运行这段代码结束后,系统会自动 delete 掉我们创建的指针。在 delete 时会调用智能指针的删除器来关闭文件。