vault backup: 2022-06-08 14:52:43

Affected files:
.obsidian/workspace
02. PARA/03. Resources(資源)/C++17/智慧指標.md
This commit is contained in:
2022-06-08 14:52:43 +08:00
parent 4fba5827bd
commit 97d82d52e8
2 changed files with 9 additions and 7 deletions

View File

@@ -22,9 +22,11 @@ auto bigBuf = std::make_unique<BigBuffer>(bufferSize);
一旦 `unique_ptr` 建立之後,使用起來就跟一般指標沒有兩樣,都是用 `->` 來操作:`bigBuf->setXXX()` or `bigBuf->getXXX()`
但是別忘記 `unique_ptr` 本身還是一個local variable所以我們可以用 `.` 來操作 `unique_ptr` ,例如我們可以用 `.reset()` 重新配一個指標:
```cpp
bigBuf.reset(std::make_unique<BigBuffer>(bufferSizeLarger));
BigBuffer* pBuffer = new BigBuffer();
bigBuf.reset(pBuffer);
```
這時候舊指標會自動delete然後指向新的指標(如果記憶體分配有成功的話,或者指向 `nullptr` (記憶體分配失敗)。
這時候舊指標會自動delete如果記憶體分配有成功的話bigBuf會接管剛剛new出來的指標,或者變成 `nullptr` (記憶體分配失敗)。
如果單純想要釋放指標,那就單純的呼叫 `reset()` 就好。
```cpp
bigBuf.reset(); // Now I'm nullptr