[問題] 請問用了auto_ptr跟沒用有什麼差別?

看板C_and_CPP (C/C++)作者 (yolling)時間14年前 (2012/03/25 23:40), 編輯推噓1(1017)
留言18則, 8人參與, 最新討論串1/1
目前我所知道的是,用new宣告出來的變數 如果沒有delete的話就會一直存在 可是我今天在網路上看到auto_ptr這個函式, 用auto_ptr去指向那個動態變數 例如auto_ptr<int> iptr (new int(10)); 如果要刪掉iptr可以使用iptr.release(); 可是這樣跟我直接delete new出來的變數有什麼差? 不都是一樣要記得刪除嗎? 雖然我有看到如果用auto_ptr的方式指出來的變數如果忘記刪 當這個作用域執行完畢之後,auto_ptr會自動幫忙刪除 那這樣就跟我一開始使用int的方式宣告不也差不多嗎@@? 因為int宣告出來的變數不是也是離開作用域之後就會被刪除? 問題可能有點奇怪,還望各位幫忙,感謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.34.32.47

03/25 23:58, , 1F
auto_ptr 就是方便你使用指標
03/25 23:58, 1F

03/25 23:59, , 2F
所以請考慮指標使用時的優點。
03/25 23:59, 2F

03/26 00:00, , 3F
你這裡說用int,那就不是指標了,比較就沒義意了吧?
03/26 00:00, 3F

03/26 00:01, , 4F
考慮一下你把auto_ptr當函式回傳值的情況
03/26 00:01, 4F

03/26 00:20, , 5F
03/26 00:20, 5F

03/26 00:56, , 6F
http://bit.ly/H0YWUx 新的unique_ptr還接受第二個模
03/26 00:56, 6F

03/26 00:57, , 7F
板引數, 所以release行為不是你想的那樣
03/26 00:57, 7F

03/26 00:58, , 8F
自變數跟一般的new出來的物件存在的space是不同的
03/26 00:58, 8F

03/26 01:05, , 9F
auto_ptr 被當成參數傳入的行為還滿悲劇的
03/26 01:05, 9F

03/26 10:35, , 10F
必須提醒一下,auto_ptr.release意思並不是釋放記憶體
03/26 10:35, 10F

03/26 10:36, , 11F
而是釋出所有權,然後把pointer給丟出來,要是沒去接
03/26 10:36, 11F

03/26 10:37, , 12F
就leak了...看過太多誤用了,用的時候請小心
03/26 10:37, 12F

03/26 11:41, , 13F
auto_ptr在c++11被廢棄了 少用為妙
03/26 11:41, 13F

03/26 12:11, , 14F
原來如此,我大概了解了,感謝各位
03/26 12:11, 14F

03/26 20:58, , 15F
char *buf = new char[20]; // heap allocation
03/26 20:58, 15F

03/26 20:59, , 16F
some_api_may_throw_exception(buf);
03/26 20:59, 16F

03/26 20:59, , 17F
delete []buf;
03/26 20:59, 17F

03/26 21:02, , 18F
好像應該用有解構式的物件取代char* 來講才對 0rz
03/26 21:02, 18F
文章代碼(AID): #1FRpniuj (C_and_CPP)
文章代碼(AID): #1FRpniuj (C_and_CPP)