我正在用C ++编写程序,我使用SQLite。我的代码:
if (s == SQLITE_ROW) {
int id = 0;
string stem;
id = sqlite3_column_int (selectStmt, 0);
stem = std::string(
reinterpret_cast<const char*>(sqlite3_column_text (selectStmt, 1))
);
if (id > 0)
StemClass *st = new StemClass(id, stem);
row++;
}
sqlite3_column_text 非常慢,并且会造成内存泄漏。
答案 0 :(得分:2)
速度方面,您可以尝试:
auto const p(reinterpret_cast<const char*>(sqlite3_column_text (selectStmt, 1)));
::std::string stem(p, sqlite3_column_bytes(selectStmt, 1));
对于泄漏,请使用智能指针,例如::std::shared_ptr
或::std::unique_ptr
。可能是你的new
泄漏了。以前,您创建了一个空的::std::string
实例,然后将新的::std::string
复制到其中。馊主意。要怀疑智能指针或某些RAII方案(例如new
)未捕获的每个SCOPE_EXIT
表达式。