【发布时间】:2012-09-13 17:43:43
【问题描述】:
我正在尝试使用 libpqxx 库开发一个非常简单直接的连接池。我对 c++ 还是很陌生,仍然对指针和引用感到很困惑。该类的行为非常简单:拥有一个带有一些已初始化连接的向量,并在需要时将连接弹出并推送到该向量上。由于指针和引用的错误实现,代码有很多错误。能给我一些提示吗?
编辑:我设法修复了所有编译错误。当我运行 main 函数时,它给了我一个分段错误。
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;
}
【问题讨论】:
-
“代码有很多错误” - 你的意思是编译错误,还是对你的程序运行有影响的运行时错误,或者你的意思是什么?或者你的意思是设计缺陷?请澄清
-
是的,由于我对指针缺乏经验而导致的设计缺陷导致的编译错误
-
那么请在这里展示它们!让我们的生活更轻松