C++笔记:智能指针 std::shared_ptr

  • Post author:
  • Post category:其他

1. 语法

std::shared_ptr<类型> 变量名称{};

std::shared_ptr<int> ptrA{};

std::shared_ptr<int> ptrB{std::make_shared<int>(5)};
  • 注意:std::make_shared不支持数组。
std::shared_ptr<int[]> ptrC{ new int[5]{1, 2, 3, 4, 5} };

2. 特性

  1. 可以有多个std::shared_ptr指向同一地址;
std::shared_ptr<int> ptrC{ ptrA };
  1. 同一地址下只有当最后一个std::shared_ptr释放的时候,才会释放其所占用的内存空间;

3. 用法

3.1. .use_count();

语法:

long std::shared_ptr.use_count();

释义:

std::shared_ptr会记录当前地址有多少个智能指针调用。 use_count();会返回当前指针共有多少个对象调用。

代码:

    std::shared_ptr<int> ptrA{std::make_shared<int>(5)};
	std::shared_ptr<int> ptrB{ ptrA };
	std::shared_ptr<int> ptrC{ ptrA };

	std::cout << ptrA.use_count() << std::endl; // 3

3.2. unique(); (C++17已废弃)

语法:

bool std::shared_ptr.unique();

释义:

unique()将会返回一个bool值,如果当前智能指针是唯一拥有该指针的,那么返回true,否则返回哈false

代码:

    std::shared_ptr<int> ptrA{std::make_shared<int>(5)};
	std::shared_ptr<int> ptrB{ ptrA };
	std::shared_ptr<int> ptrC{ ptrA };
	
    std::cout << ptrA.unique() << std::endl; // false

3.3. reset();

语法:

std::shared_ptr.reset();

释义:

reset()会将当前共享指针设置为nullptr,同时如果当前智能指针是最后一个拥有该指针的对象,那么将会释放内存。

代码:

    std::shared_ptr<int> ptrA{std::make_shared<int>(5)};
	std::shared_ptr<int> ptrB{ ptrA };
	std::shared_ptr<int> ptrC{ ptrA };
	
	ptrB.rest();
	
    std::cout << ptrA << std::endl;  // 010FA41C
    std::cout << ptrB << std::endl;  // 00000000
    std::cout << ptrC << std::endl;  // 010FA41C

版权声明:本文为Nine_Yao原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。