1. 程式人生 > >unique_ptr與shared_ptr的一個坑

unique_ptr與shared_ptr的一個坑

當所維護的指標為nullptr時
unique_ptr釋放時不會呼叫Deleter
shared_ptr釋放時會呼叫Deleter

在某些情況下,比如 FIFE 型別指標的 Deleter ,即 fclose, 呼叫 fclose(nullptr) 會拋異常

/*
 * Author:[email protected]
 */
#include <bits/stdc++.h>

using namespace std;

void fun1() {
	//unique_ptr<FILE, decltype(fclose)*> p(fopen("a.txt","w"),fclose);	
	unique_ptr<FILE, decltype(fclose)*> p(nullptr,fclose);
}

void fun2() {
	//shared_ptr<FILE> p(fopen("a.txt", "w"), fclose);
	shared_ptr<FILE> p(nullptr, fclose);
}

int main() {
	fun1();
	cout << "unique success" << endl;
	fun2();
	cout << "shared success" << endl;
	return 0;
}

結果:
unique success
[Finished in 1.1s with exit code -11]