shared_ptr 傳值和傳引用

Junei110發表於2020-10-06

一、
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;
}

在這裡插入圖片描述
表明:當使用引用的時候,指標的指向會徹底發生改變。

總結:箇中取別自行領悟

相關文章