C++ unique_ptr

本文探讨了C++中智能指针unique_ptr与工厂模式的结合使用,展示了如何在类中初始化和使用unique_ptr。通过实例代码解释了unique_ptr的转移操作及其在防止内存泄漏上的作用,并介绍了 deleter 的自定义使用。此外,还涉及了数组类型的unique_ptr用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include "iostream"
#include <memory>
#include <algorithm>
#include <string>
#include <vector>

using namespace std;

class ClassFactory
{
    //工厂模式和unique_ptr是对好基友
    //当class
};

class MyClass
{
private:
    // MyClass owns the unique_ptr.
    unique_ptr<ClassFactory> factory;//当该成员随着MyClass对象析构时,也会
public:

    // Initialize by using make_unique with ClassFactory default constructor.
    MyClass() : factory (make_unique<ClassFactory>())
    {
    }

    void MakeClass()
    {
        //factory->DoSomething();
    }
};



int main()
{

    unique_ptr<int> pInt(new int(6));

    cout <<  *pInt <<endl;

    //unique_ptr<int> pInt2(pInt);    // 报错
    //unique_ptr<int> pInt3 = pInt;   // 报错
    auto pInt4 = move(pInt);
    cout << *pInt4 <<endl;
    unique_ptr<int> pInt5 (move(pInt4));
    //cout << *pInt4 <<endl;运行期出错
    cout << *pInt5 <<endl;

    
    auto deleter = [](int* p){
        cout <<"del "<< *p <<endl;
    };

    unique_ptr<int, decltype(deleter)> pInt6(new int(6), deleter);
    //pInt6.release(); deleter不起效果  放弃对它所指对象的控制权,并返回保存的指针,将up置为空,不会释放内存
    pInt6.reset();//参数可以为 空、内置指针,先将up所指对象释放,然后重置up的值


    unique_ptr<int[]> p(new int[5]{1,2,3,4,5});
    cout <<p[0] <<endl;
    p[0]=0;
    cout <<p[0] <<endl;



    getchar();
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值