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 がそこに一時オブジェクトを作成する理由がわかりません。