vault backup: 2022-06-06 11:24:20
Affected files: 02. PARA/03. Resources(資源)/C++17/智慧指標.md
This commit is contained in:
@@ -78,4 +78,22 @@ myBuf->setZero(startAddr, endAddr);
|
|||||||
bufCopy->setOne(startAddr, endAddr);
|
bufCopy->setOne(startAddr, endAddr);
|
||||||
```
|
```
|
||||||
|
|
||||||
`shared_ptr`內部有一個參考記數(reference cou)
|
`shared_ptr`內部有一個參考記數(reference count)來紀錄它所擁有的指標已經分享給幾個變數了,只要有變數離開了他的scope,參考記數就會減少,反之,要是像上面那樣有人複製的指標,參考記數就會增加,參考記數歸0的時候,指標就會被釋放。
|
||||||
|
|
||||||
|
有了`shared_ptr`我們就不必擔心delete的責任問題:
|
||||||
|
```cpp
|
||||||
|
std::shared_ptr<BigBuffer> getBuffer(int32_t bufferSize) {
|
||||||
|
return std::make_shared<BigBuffer>(bufferSize);
|
||||||
|
}
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
auto myBuf = getBuffer(1024); // new(malloc) memory
|
||||||
|
// use myBuf
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
} // myBuf delete memory here
|
||||||
|
```
|
||||||
|
|
||||||
|
`shared_ptr`有一個問題是可以會「循環參考」(cyclic references),也就是share_ptr A指向另一個share_ptr B,然後share_ptr B又指向share_ptr A,這造成參考記數(reference count)不會減少而永遠無法釋出指標。這個是需要注意的。
|
||||||
|
|
||||||
|
但是`shared_ptr`還是讓記憶體的ㄈ
|
||||||
|
|||||||
Reference in New Issue
Block a user