libpqxx ライブラリを使用して、非常にシンプルでわかりやすい接続プールを開発しようとしています。私はC ++にまったく慣れていないので、ポインターと参照についてまだ非常に混乱しています。クラスの動作は非常に単純です。初期化された接続を持つベクターを用意し、必要なときに接続をベクターにポップおよびプッシュします。ポインターと参照の不適切な実装により、コードには多くのエラーがあります。ヒントを教えてください。
編集:すべてのコンパイル エラーを修正できました。メイン関数を実行すると、セグメンテーション違反が発生します。
class DbPool {
公衆:
pqxx::result runQuery(const string& query) {
connection *conn = getCon();
work trans(*conn);
result res = trans.exec(query);
trans.commit();
releaseCon(conn);
return res;
}
DbPool(uint32_t max_cons) {
for (uint32_t i = 0; i < max_cons; i++) {
connection* con = createCon();
m_freeCons.push_back(shared_ptr < connection > (con));
}
}
プライベート:
connection * createCon() {
connection * conn =
new connection(
"user='ak' password='rootpassword' dbname='bips_office' hostaddr='127.0.0.1' port='5432'");
return conn;
}
void releaseCon(connection *con) {
m_freeCons.push_back(shared_ptr < connection > (con));
}
connection* getCon() {
shared_ptr < connection > conn = *(m_freeCons.end() - 1);
m_freeCons.pop_back();
return conn.get();
}
vector<shared_ptr<connection> > m_freeCons;
};
int main(int argc, char *argv[]) {
DbPool *pool = new DbPool(5);
result res = pool->runQuery("SELECT COUNT (*) from captures");
return 0;
}