shared_ptr 傳值和傳引用
一、
shared_ptr 物件作為值引數
void fun(std::shared_ptr<int> ptr)
{
std::cout << ptr << endl;
}
int main()
{
std::shared_ptr<int> ptr = make_shared<int>(55);
std::cout << ptr << std::endl;
fun(ptr);
std::cout << ptr << std::endl;
return 0;
}
結果中表明:當指標作為引數,未進行操作情況下,所指向的時同一塊記憶體空間。
二、
void fun(std::shared_ptr<int> ptr)
{
ptr = std::shared_ptr<int>(new int(34));
//這個地方需要delete嗎?
std::cout << ptr << endl;
}
int main()
{
std::shared_ptr<int> ptr = make_shared<int>(55);
std::cout << ptr << std::endl;
fun(ptr);
std::cout << ptr << std::endl;
return 0;
}
結果表明:指標在函式內部發生變化,當函式結束時,函式內部指標自動銷燬,重新指向原來的記憶體空間中。
三、
智慧指標作為引用傳參
void fun(std::shared_ptr<int>& ptr)
{
ptr = std::shared_ptr<int>(new int(34));
//這個地方需要delete嗎?
std::cout << ptr << endl;
}
int main()
{
std::shared_ptr<int> ptr = make_shared<int>(55);
std::cout << ptr << std::endl;
fun(ptr);
std::cout << ptr << std::endl;
return 0;
}
表明:當使用引用的時候,指標的指向會徹底發生改變。
總結:箇中取別自行領悟
相關文章
- 值傳遞和引用傳遞
- Java的值傳遞和引用傳遞Java
- JavaScript的值傳遞和引用傳遞JavaScript
- Day30--值傳遞和引用傳遞
- C#程式設計引用型別和值型別 以及引用傳遞和值傳遞C#程式設計型別
- 關於值傳遞和引用傳遞的解釋
- Java 從陣列來看值傳遞和引用傳遞Java陣列
- 快速搞懂值傳遞與引用傳遞
- Java - 是值傳遞還是引用傳遞Java
- GO切片傳值/引用/指標Go指標
- Python為什麼不是傳值或傳引用? - mathsppPython
- php 傳值與傳引用的理解(通俗易懂)PHP
- Python的函式引數傳遞:傳值?引用?Python函式
- Go語言引數傳遞是傳值?還是傳引用 ?Go
- Python引數傳遞,既不是傳值也不是傳引用Python
- golang工作筆記(二)值傳遞與引用傳遞Golang筆記
- 解惑4:java是值傳遞還是引用傳遞Java
- 這一次,徹底解決Java的值傳遞和引用傳遞Java
- go語言引數傳遞到底是傳值還是傳引用Go
- C#|.net core 基礎 - 值傳遞 vs 引用傳遞C#
- js中 函式引數的 傳值/傳引用 問題JS函式
- 這一次,讓你徹底理解Java的值傳遞和引用傳遞!Java
- [精]--這一次,讓你徹底明白Java的值傳遞和引用傳遞!Java
- SAP ABAP 方法呼叫裡傳值(Pass Value)和傳引用(Pass Reference)的區別試讀版
- python中傳值和傳地址問題Python
- Java是值傳遞還是引用傳遞,又是怎麼體現的Java
- 面試官問:Go 中的引數傳遞是值傳遞還是引用傳遞?面試Go
- 關於String是值傳遞還是引用傳遞,talk is cheap, just show codes
- go 值傳遞和地址傳遞的例子Go
- Python 中變數賦值傳遞時的引用和複製介紹Python變數賦值
- vue和react元件傳值VueReact元件
- php 迴圈陣列引用傳值改變陣列本身的值PHP陣列
- C++智慧指標之shared_ptr與右值引用(詳細)C++指標
- 面試官:兄弟,說說Java到底是值傳遞還是引用傳遞面試Java
- Java傳參傳值Java
- c# 方法引數(傳值,傳引用,ref,out,params,可選引數,命名引數)C#
- C++ 右值引用和左值引用C++
- vue父子傳值與非父子傳值Vue