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

【C++标准模板库笔记2】智能指针shared_ptr的简单使用

2017-08-19 13:00 573 查看
/**********************************************************************************************************
文件说明:
【1】智能指针shared_ptr
【2】记住:智能指针就是指针,例如:std::shared_ptr<int> obj===========int* obj,只不过,智能指针用new
开辟的空间不需要用delete释放,智能指针会自动的释放内存空间,这防止了内存的泄露。
详细说明:
【1】shared_ptr:shared_ptr是一种智能指针(smart pointer),作用如同指针,但会记录由多少个shared_ptr共
同指向同一个对象,这便是C++中所谓的引用计数(reference counting)。一旦最后一个这样的
指针被销毁,也就是一旦某个对象的引用计数变为0,这个对象就会被自动删除。这在非环形数
据结构中防止资源泄露很有帮助。
【2】auto_ptr由于它的破坏性复制语义,无法满足标准容器对于元素的要求,因而不能放在标准容器中;如果我
们希望当容器析构时能够自动把它容纳的指针元素所指的对象删除时,通常采用一些间接的方式实现,
但是显得较为繁琐。boost库中提供了一种新型的智能指针shared_ptr,它解决了在多个指针间共享对
象所有权的问题,同时也满足容器对元素的要求,因而可以安全的放入容器中。
【3】shared_ptr最初实现于Boost库中,后来被C++标准委员会收录于TRQ技术报告中,称为C++11标准的一部分。
***********************************************************************************************************/

#include<memory>
#include<cassert>
#include<iostream>

using namespace std;

class TestA
{
public:
TestA(std::shared_ptr<int> dataMem):dataMem_(dataMem)
{
//===============================================
}
void value(int i)
{
*dataMem_ = i;
}
public:
std::shared_ptr<int>   dataMem_;           //【1】定义了一个指向整形的智能指针

};
class TestB
{
public:
TestB(std::shared_ptr<int> dataMem):dataMem_(dataMem)
{
//===============================================
}
int value()
{
return *dataMem_;
}
private:
std::shared_ptr<int>   dataMem_;
};

int main()
{
std::cout<<"[TEST]The environment is successfully!"<<std::endl;
std::shared_ptr<int>  pTemp(new int(14));
TestA  objA(pTemp);

objA.value(12);
std::cout<<*objA.dataMem_<<std::endl;

std::system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: