c++11 智能指针 unique_ptr和shared_ptr

1、unique_ptr

//1、使用unique_ptr来管理动态内存,只要unique_ptr指针创建成功,其析构函数都会被调用,无需手动释放。
//2、创建一个unique_ptr实例
unique_ptr<int> pInt(new int(5));
cout << *pInt;

//3、移动 
unique_ptr<int> pInt2 = std::move(pInt);    // 转移所有权

//4、函数返回unique_ptr
unique_ptr不支持拷贝操作,但却有一个例外:可以从函数中返回一个unique_ptr。
unique_ptr<int> clone(int p)
{
    unique_ptr<int> pInt(new int(p));
    return pInt;    // 返回unique_ptr
}

//5、在容器中保存指针
vector<unique_ptr<int>> vec;
unique_ptr<int> p(new int(5));
vec.push_back(std::move(p));    // 使用移动语义

//6、管理动态数组
unique_ptr<int[]> p(new int[5])

2、share_ptr

 
shared_ptr基于”引用计数”模型实现,多个shared_ptr可指向同一个动态对象,并维护一个共享的引用计数器,记录了引用同一对象的shared_ptr实例的数量。当最后一个指向动态对象的shared_ptr销毁时,会自动销毁其所指对象(通过delete操作符)。

//1、初始化
std::shared_ptr<int> p3 = std::make_shared<int>(2);  //方式0 推荐
std::shared_ptr<int> p1(new int(1)); //方式1
std::shared_ptr<int> p2 = p1; //方式2
//不要用一个原始指针初始化多个shared_ptr
//不要在函数实参中创建shared_ptr。如下
void f(shared_ptr<int>(new int))

//尽量不用shared_ptr 管理this指针
//2、放入容器中的动态对象,使用shared_ptr包装,比unique_ptr更合适 
vector<shared_ptr<int>> vec;
class T
{}
std::vector<std::shared_ptr<T>>

 

https://www.cnblogs.com/lsgxeva/p/7788061.html     

https://www.cnblogs.com/DswCnblog/p/5628195.html 

posted @ 2020-04-24 15:25  玥茹苟  阅读(1700)  评论(0编辑  收藏  举报