C++智能指针在接口中的应用

一,应用场景

       使用mysql数据库时, 当应用数据写入mysql失败后,使用sqlite数据库作临时存储,然后更新到mysql数据库中。

抽象接口如下:

#include <iostream>
#include <memory>

class IDataBase;
class CMysqlDataBase;
class CSqliteDataBase;
typedef std::shared_ptr<IDataBase>         SPIDataBase;
typedef std::shared_ptr<CMysqlDataBase>    SPMysqlDataBase;
typedef std::shared_ptr<CSqliteDataBase>   SPSqliteDataBase;
class IDataBase
{
public:
    virtual ~IDataBase(){}//使子类能够调用自己的析构函数
    virtual int execSQL(const std::string &sql) = 0;
    //......略
};

class CMysqlDataBase
{
public:
    virtual ~CMysqlDataBase() {std::cout<<"CMysqlDataBase::~CMysqlDataBase()\n";}
    virtual int execSQL(const std::string &sql)
    {
        std::cout<<"CMysqlDataBase::execSQL: "<< sql.c_str() <<std::endl;
    }
    //......略
};

class CSqliteDataBase
{
public:
    virtual ~CSqliteDataBase() {std::cout<<"CSqliteDataBase::~CSqliteDataBase()\n";}
    virtual int execSQL(const std::string &sql)
    {
        std::cout<<"CSqliteDataBase::execSQL: "<< sql.c_str() <<std::endl;
    }
    //......略
};

  使用数据库对象时,需要根据条件获取到mysql数据库或者sqlite数据库:

class CDataBaseHelp
{
public:
    //SPIDataBase tmp = m_spMysqlDataBase;
    //SPIDataBase tmp = m_spSqliteDataBase;
    SPIDataBase GetSuitableDataBase();

private:
    SPMysqlDataBase m_spMysqlDataBase;
    SPSqliteDataBase m_spSqliteDataBase;
};

发现可以将子类智能指针直接赋值给父类智能指针,从而完成内存管理操作。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值