1

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

  • 我怎样才能避免这种情况?
  • 还有其他方法吗?
4

1 回答 1

2

为了速度,您可以尝试:

auto const p(reinterpret_cast<const char*>(sqlite3_column_text (selectStmt, 1)));

::std::string stem(p, sqlite3_column_bytes(selectStmt, 1));

对于泄漏,请使用智能指针,例如::std::shared_ptror ::std::unique_ptr。可能是你new的泄漏。以前,您正在创建一个空::std::string实例,然后将一个新实例复制::std::string到其中。馊主意。怀疑new不是被智能指针或某些 RAII 方案(例如SCOPE_EXIT)捕获的每个表达式。

于 2013-09-16T06:46:52.717 回答