對於使用new動態配置的資源,在不使用時必須記得delete,以釋放記憶體空間,然而動態記憶體配置很容易發生忘了delete,或是對同一個記憶體位址delete兩次(例如一個物件被指定給兩個指標),或是對一個已經被delete的位址再作讀寫動作。
C++標準函式庫中提供auto_prt,可以協助您動態管理new而建立的物件,要使用auto_prt,您要含入memory表頭檔,例如: #include
<memory>
auto_ptr<int>
iPtr (new int(100)); auto_ptr<string> sPtr (new string("caterpillar"));
cout
<< *iPtr << endl; // 顯示100 if(sPtr->empty()) cout << "字串為空" << endl;
auto_ptr<int>
iPtr;
if(iPtr.get()
== 0) { iPtr.reset(new int(100)); }
auto_ptr可以使用另一個auto_ptr來建立,這會造成所有權的轉移,例如: auto_ptr<SafeArray>
ptr1(new SafeArray(19)); auto_ptr<SafeArray> ptr2(ptr1);
auto_ptr<SafeArray>
ptr1(new SafeArray(19)); auto_ptr<SafeArray> ptr2(new SafeArray(20)); ptr2 = ptr1;
auto_ptr的資源維護動作是以inline的方式來完成,也就是在編譯時會被擴展開來,所以使用auto_ptr並不會犧牲效率。 最後要注意的是,auto_ptr不能用來管理動態配置而來的陣列,如果用它來管理動態配置而來的陣列,結果是不可預期的 |
原文链接: https://www.cnblogs.com/nickchan/archive/2012/06/09/3104411.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/52371
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!