unique_ptr可以用来管理在堆上分配的指针,智能指针唯一的拥有着指针,并在离开作用域时释放堆空间上分配的内存资源:
#include#include using namespace std; class A{ public: A() { cout<<"Construct A"< 但资源并不是只有内存一种,有的时候可能会希望其他资源也能拥有这样的管理方式。
unique_ptr可以通过deleter来定制化的完成对资源的释放。
#include#include using namespace std; const char* file_name = "./test.txt"; void closeFileFunction(FILE* fp) { if(fp != nullptr) { fclose(fp); cout<<"fclose in "<<__func__< ufp(fopen(file_name, "a"), closeFileFunction); fprintf(&*ufp, "hellon"); } class CloseFileOperator{ public: void operator ()(FILE* fp) { if(fp != nullptr) { fclose(fp); cout<<"fclose in CloseFileOperator"< ufp(fopen(file_name, "a")); fprintf(&*ufp, "worldn"); } auto closeFileLambda = [](FILE* fp) { if(fp != nullptr) { fclose(fp); cout<<"fclose in closeFileLambda"< ufp(fopen(file_name, "a"), closeFileLambda); fprintf(&*ufp, "!!!n"); } int main () { doTest1(); cout<<"doTest1 done"<



