unique_ptr與shared_ptr的一個坑
阿新 • • 發佈:2018-12-02
當所維護的指標為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]