为什么在这种特定情况下std :: unique_ptr <>不起作用?

时间:2018-06-23 00:19:17

标签: c++ mysql

因此,我了解了使用std::unique_ptr的好处。我为MySQL尝试过,并且有一些错误。我试图缩小范围。是什么原因造成的?

std::unique_ptr<sql::PreparedStatement> stmt_prepared;

stmt_prepared = conn->prepareStatement("SELECT content FROM books WHERE title = ?;");

第一个=出现编译时错误:

  

“没有运算符'='匹配这些操作数。”

prepareStatement()返回指向sql::PreparedStatement的指针。

如果有关系,PreparedStatement类具有纯虚函数。

有关该课程的更多信息:

https://dev.mysql.com/doc/connector-cpp/1.1/en/connector-cpp-examples-prepared-statements.html

1 个答案:

答案 0 :(得分:1)

std::unique_ptr没有定义使用原始指针的副本分配运算符。相反,您可以使用reset函数来调用析构函数并释放当前持有的对象(在这种情况下,没有对象),然后存储传递的对象。

std::unique_ptr<sql::PreparedStatement> stmt_prepared;
stmt_prepared.reset(conn->prepareStatement("SELECT content FROM books WHERE title = ?;"));

如果您不想使用值构造unique_ptr

std::unique_ptr<sql::PreparedStatement> stmt_prepared(
    conn->prepareStatement("SELECT content FROM books WHERE title = ?;")
);