我正在将我的代码转换为使用 unique_ptr 而不仅仅是指针。我正在尝试为 sqlite3_statement 创建一个 unique_ptr,它会在其自定义删除器中自动调用函数 sqlite3_finalize(sqlite3_stmt *pStmt)。我怎样才能让它在我的头文件中工作?我在这里完全不知所措,欢迎任何帮助。谢谢。
在 igleyy 的大力帮助下(当出于某种原因调用删除器时,他的解决方案给了我内存访问错误)我想出了这个似乎有效且看起来很优雅的解决方案;
数据源.h
#pragma once
#include <sqlite\sqlite3.h>
#include <string>
#include <vector>
#include <memory>
class Datasource
{
void statementDeleter(sqlite3_stmt* object);
std::unique_ptr<sqlite3_stmt, std::function<void(sqlite3_stmt*)>> statement;
Datasource(Datasource const &);
Datasource &operator=(Datasource const &);
public:
Datasource(void);
~Datasource(void);
};
数据源.cpp
#include "Datasource.h"
Datasource::Datasource(void) :
statement(nullptr,std::bind(&Datasource::statementDeleter,this,std::placeholders::_1))
{
}
void Datasource::statementDeleter(sqlite3_stmt * s)
{
sqlite3_finalize(s);
}
Datasource::~Datasource(void)
{
}