sqlite3_column_text非常慢(C)并且会造成内存泄漏

时间:2013-09-16 06:27:48

标签: c++ memory-leaks sqlite

我正在用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 非常慢,并且会造成内存泄漏。

  • 我该如何避免这种情况?
  • 还有另一种方式吗?

1 个答案:

答案 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表达式。