boost - Smart Pointer

Basic

class Fruit
{
public:
    typedef boost::shared_ptr<Fruit> Pointer; // notice
    typedef boost::shared_ptr<Fruit const> ConstPointer; // notice

    Fruit(int weight)
        : m_Weight(weight)
    {}
private:
    int m_Weight;
};

void Basic()
{
    Fruit::Pointer ptr(new Fruit(1)); // notice
    Fruit * pRaw = ptr.get(); // notice
};

Shared from this

class Fruit
    : public boost::enable_shared_from_this<Fruit> // notice
{
public:
    typedef boost::shared_ptr<Fruit> Pointer;
    typedef boost::shared_ptr<Fruit const> ConstPointer;

    static void PrintWeight(ConstPointer ptr)
    {
        cout << ptr->m_Weight << endl;
    }

    void PrintSelf() const
    {
        PrintWeight(shared_from_this()); // notice
    }
};

Customized Deletor

void CustomizedDeletor()
{
    boost::shared_ptr<FILE> pf(fopen("test.txt", "r"), fclose); // notice
    boost::shared_ptr<void> p(CoTaskMemAlloc(10), CoTaskMemFree); // notice
}
posted @   frankbadpot  阅读(355)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
点击右上角即可分享
微信分享提示