您的位置:首页 > 编程语言 > C语言/C++

C++11智能指针之shared_ptr

2018-01-26 17:11 330 查看
shared_ptr类似 Objective-C中的【引用概念】,这里分别测试了【引用增加】、【引用撤销】、【唯一性检查】,这里测试动作名称是自己随意叫的,现贴出测试代码及输出结果:

测试代码:

#include <windows.h>
#include <iostream>
#include <memory> // need include this header file

int main(void)
{

std::shared_ptr<int> pInt(new int(5));

std::cout << "---------------------" << std::endl;

std::cout << *pInt << std::endl;
std::cout << "pInt count :\t" << pInt.use_count() << std::endl;

// check unique
if (pInt.unique())
{
std::cout << "pInt [is] unique pointer to object " << std::endl;
}
else
{
std::cout << "pInt [is not] unique pointer to object " << std::endl;
}

std::shared_ptr<int> pInt2(pInt);

std::cout << "---------------------" << std::endl;

std::cout << "pInt count :\t" << pInt.use_count() << std::endl;
std::cout << "pInt2 count :\t" << pInt2.use_count() << std::endl;

// check unique
if (pInt.unique())
{
std::cout << "pInt is unique pointer to object " << std::endl;
}
else
{
std::cout << "pInt [is not] unique pointer to object " << std::endl;
}

std::shared_ptr<int> pInt3(pInt);

std::cout << "---------------------" << std::endl;

std::cout << "pInt count :\t" << pInt.use_count() << std::endl;
std::cout << "pInt2 count :\t" << pInt2.use_count() << std::endl;
std::cout << "pInt3 count :\t" << pInt3.use_count() << std::endl;

pInt2.reset();

std::cout << "---------------------" << std::endl;

std::cout << "after pInt2.reset()" << std::endl;

std::cout << "pInt count :\t" << pInt.use_count() << std::endl;
std::cout << "pInt2 count :\t" << pInt2.use_count() << std::endl;
std::cout << "pInt3 count :\t" << pInt3.use_count() << std::endl;

pInt2.reset();

std::cout << "---------------------" << std::endl;

std::cout << "after pInt2.reset()" << std::endl;

std::cout << "pInt count :\t" << pInt.use_count() << std::endl;
std::cout << "pInt2 count :\t" << pInt2.use_count() << std::endl;
std::cout << "pInt3 count :\t" << pInt3.use_count() << std::endl;

pInt3.reset();

std::cout << "---------------------" << std::endl;

std::cout << "after pInt3.reset()" << std::endl;

std::cout << "pInt count :\t" << pInt.use_count() << std::endl;
std::cout << "pInt2 count :\t" << pInt2.use_count() << std::endl;
std::cout << "pInt3 count :\t" << pInt3.use_count() << std::endl;

// check unique
if (pInt.unique())
{
std::cout << "pInt is unique pointer to object " << std::endl;
}
else
{
std::cout << "pInt [is not] unique pointer to object " << std::endl;
}

system("pause");

return 0;
}

输出结果如下图所示:



其它可参考链接:http://blog.csdn.net/xiejingfa/article/details/50750037
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  shared_ptr