在MySQL Connector中使用智能指针

托马斯·卡斯珀奇克(Tomasz Kasperczyk)

大多数与mysql连接器库相关的教程都假定用户将使用原始指针。我想改用智能指针。我写了以下课程:

class Database{
    private:
        bool _connected = false;
        std::shared_ptr<sql::Driver> _driver;
        std::shared_ptr<sql::Connection> _connection;
        std::shared_ptr<sql::Statement> _statement;
        std::shared_ptr<sql::ResultSet> _resource;
    public:
        Database();
        ~Database();
        bool connect(const std::string &ip, const std::string &user, const std::string password);
        bool connected();
};

我正在尝试实现该connect功能,但是在编译过程中收到以下错误:

/usr/include/c++/5.3.0/ext/new_allocator.h:120:4: error: invalid new-expression of abstract class type ‘sql::Driver’
{ ::new((void *)__p) _Up(std::forward<_Args>(__args)...); }

它是由以下代码行引起的:

this->_driver = std::make_shared<sql::Driver>(get_driver_instance());

我究竟做错了什么?我发现很少有带有智能指针的示例,但是在每个sql::Driver实例中,实例都是一个原始指针。不可能将get_driver_instance()函数的结果分配给智能指针吗?

更新

我想我应该使用reset函数而不是make_shared模板。不幸的是:

this->_driver.reset(get_driver_instance());

没有解决问题,我得到了这个错误:

/usr/include/cppconn/driver.h:39:10: error: ‘virtual sql::Driver::~Driver()’ is protected
virtual ~Driver() {}

我猜想它shared_ptr不能“声明”驱动程序的析构函数,因为它受到了保护(如错误中所述)。有什么解决方法吗?或者也许我应该在处理sql::Driver时仅使用原始指针

夜翼

产生的驱动程序对象指针get_driver_instance()是指向静态存储对象AFAIK的指针,并且该指针可能不是deleted。因此,您不需要智能指针即可管理其使用寿命。程序结束时,静态对象将被销毁。在帖子中的其他对象(sql::Connectionsql::Statementsql::ResultSet)需要被删除,以便您可以使用智能指针管理这些。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

智能指针+循环+“->”

来自分类Dev

使用智能指针有什么问题?

来自分类Dev

QT Creator和使用智能指针的奇怪代码完成

来自分类Dev

使用智能指针时发生内存泄漏

来自分类Dev

智能指针实现

来自分类Dev

使用C ++ 11智能指针作为C函数参数

来自分类Dev

将std :: vector与智能指针一起使用

来自分类Dev

在这种情况下如何使用智能指针

来自分类Dev

在Stack实现中使用哪个智能指针?

来自分类Dev

在IntelliJ IDEA中使用JDBC / Mysql Connector

来自分类Dev

如何使用智能指针来构建树?

来自分类Dev

正确使用标准智能指针以确保PTR安全的方法

来自分类Dev

使用智能指针作为全局变量

来自分类Dev

使用智能指针进行继承的pimpl

来自分类Dev

获取智能指针的指针

来自分类Dev

使用智能指针的C ++链接列表

来自分类Dev

标量和数组在智能指针中的使用

来自分类Dev

使用智能指针时如何跟踪内存分配

来自分类Dev

指向智能指针托管阵列中的智能指针

来自分类Dev

什么时候应该使用智能指针?

来自分类Dev

尝试使用智能指针时引发异常

来自分类Dev

使用智能指针指向const int的指针

来自分类Dev

智能指针的语法

来自分类Dev

智能指针的概念

来自分类Dev

gtkmm小部件-使用智能指针还是指针?

来自分类Dev

智能指针实现

来自分类Dev

智能指针+循环+“->”

来自分类Dev

智能指针模板

来自分类Dev

关于在 winsock 的 addrinfo 结构体中使用智能指针的问题