vault backup: 2022-06-08 14:52:43
Affected files: .obsidian/workspace 02. PARA/03. Resources(資源)/C++17/智慧指標.md
This commit is contained in:
10
.obsidian/workspace
vendored
10
.obsidian/workspace
vendored
@@ -10,7 +10,7 @@
|
|||||||
"state": {
|
"state": {
|
||||||
"type": "markdown",
|
"type": "markdown",
|
||||||
"state": {
|
"state": {
|
||||||
"file": "02. PARA/03. Resources(資源)/git/submodule.md",
|
"file": "02. PARA/03. Resources(資源)/C++17/智慧指標.md",
|
||||||
"mode": "source",
|
"mode": "source",
|
||||||
"source": true
|
"source": true
|
||||||
}
|
}
|
||||||
@@ -23,7 +23,7 @@
|
|||||||
"state": {
|
"state": {
|
||||||
"type": "outline",
|
"type": "outline",
|
||||||
"state": {
|
"state": {
|
||||||
"file": "02. PARA/03. Resources(資源)/git/submodule.md"
|
"file": "02. PARA/03. Resources(資源)/C++17/智慧指標.md"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -81,7 +81,7 @@
|
|||||||
"state": {
|
"state": {
|
||||||
"type": "backlink",
|
"type": "backlink",
|
||||||
"state": {
|
"state": {
|
||||||
"file": "02. PARA/03. Resources(資源)/git/submodule.md",
|
"file": "02. PARA/03. Resources(資源)/C++17/智慧指標.md",
|
||||||
"collapseAll": true,
|
"collapseAll": true,
|
||||||
"extraContext": true,
|
"extraContext": true,
|
||||||
"sortOrder": "alphabetical",
|
"sortOrder": "alphabetical",
|
||||||
@@ -125,6 +125,7 @@
|
|||||||
},
|
},
|
||||||
"active": "94f0e8a81af6c9e2",
|
"active": "94f0e8a81af6c9e2",
|
||||||
"lastOpenFiles": [
|
"lastOpenFiles": [
|
||||||
|
"02. PARA/03. Resources(資源)/C++17/智慧指標.md",
|
||||||
"02. PARA/03. Resources(資源)/git/submodule.md",
|
"02. PARA/03. Resources(資源)/git/submodule.md",
|
||||||
"02. PARA/03. Resources(資源)/git.md",
|
"02. PARA/03. Resources(資源)/git.md",
|
||||||
"02. PARA/03. Resources(資源)/C++17/rvalue.md",
|
"02. PARA/03. Resources(資源)/C++17/rvalue.md",
|
||||||
@@ -133,7 +134,6 @@
|
|||||||
"02. PARA/01. Project(專案)/008. Sentinel.md",
|
"02. PARA/01. Project(專案)/008. Sentinel.md",
|
||||||
"02. PARA/03. Resources(資源)/FFMPEG/01. Setup.md",
|
"02. PARA/03. Resources(資源)/FFMPEG/01. Setup.md",
|
||||||
"02. PARA/03. Resources(資源)/FFMPEG/00. Introduction.md",
|
"02. PARA/03. Resources(資源)/FFMPEG/00. Introduction.md",
|
||||||
"02. PARA/03. Resources(資源)/FFMpeg.md",
|
"02. PARA/03. Resources(資源)/FFMpeg.md"
|
||||||
"02. PARA/03. Resources(資源)/99. templates/日記.md"
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@@ -22,9 +22,11 @@ auto bigBuf = std::make_unique<BigBuffer>(bufferSize);
|
|||||||
一旦 `unique_ptr` 建立之後,使用起來就跟一般指標沒有兩樣,都是用 `->` 來操作:`bigBuf->setXXX()` or `bigBuf->getXXX()`。
|
一旦 `unique_ptr` 建立之後,使用起來就跟一般指標沒有兩樣,都是用 `->` 來操作:`bigBuf->setXXX()` or `bigBuf->getXXX()`。
|
||||||
但是別忘記 `unique_ptr` 本身還是一個local variable,所以我們可以用 `.` 來操作 `unique_ptr` ,例如我們可以用 `.reset()` 重新配一個指標:
|
但是別忘記 `unique_ptr` 本身還是一個local variable,所以我們可以用 `.` 來操作 `unique_ptr` ,例如我們可以用 `.reset()` 重新配一個指標:
|
||||||
```cpp
|
```cpp
|
||||||
bigBuf.reset(std::make_unique<BigBuffer>(bufferSizeLarger));
|
BigBuffer* pBuffer = new BigBuffer();
|
||||||
|
bigBuf.reset(pBuffer);
|
||||||
```
|
```
|
||||||
這時候舊指標會自動delete,然後指向新的指標(如果記憶體分配有成功的話),或者指向 `nullptr` (記憶體分配失敗)。
|
這時候舊指標會自動delete,如果記憶體分配有成功的話,bigBuf會接管剛剛new出來的指標,或者變成 `nullptr` (記憶體分配失敗)。
|
||||||
|
|
||||||
如果單純想要釋放指標,那就單純的呼叫 `reset()` 就好。
|
如果單純想要釋放指標,那就單純的呼叫 `reset()` 就好。
|
||||||
```cpp
|
```cpp
|
||||||
bigBuf.reset(); // Now I'm nullptr
|
bigBuf.reset(); // Now I'm nullptr
|
||||||
|
|||||||
Reference in New Issue
Block a user