1

MYSQL_RES ハンドルを解放するためのヘルパー クラスがあります。

class auto_mysqlres
{
public:
  auto_mysqlres(MYSQL_RES *res) : m_res(res)
  {
  }

  ~auto_mysqlres()
  {
    if (m_res != NULL)
      mysql_free_result(m_res);
  }

  operator MYSQL_RES* ()
  {
    return m_res;
  }

private:
  auto_mysqlres& operator= (const auto_mysqlres &res);
  auto_mysqlres (const auto_mysqlres &res);

private:
  MYSQL_RES *m_res;
};

この方法で使用しようとすると auto_mysqlres result = return_pointer_to_mysql_res(); 、エラーが発生しGCC 4.6.3: auto_mysqlres::auto_mysqlres(const auto_mysqlres&) is privateます。ただし、MSVC 2008 ではエラーは発生しません。

return_pointer_to_mysql_resもちろんMYSQL_RES*、この行の問題を修正しましたauto_mysqlres result (return_pointer_to_mysql_res());

しかし、なぜそのエラーが発生するのかを知りたいです。GCC がそこに一時オブジェクトを作成する理由がわかりません。

4

2 に答える 2