From d9cb0702158fd045285f2c0a904cb31a45a3864a Mon Sep 17 00:00:00 2001 From: Anubisss Date: Sat, 23 Jan 2010 14:45:58 +0100 Subject: Implement QueryResult_AutoPtr type which is ACE's reference counted auto_ptr(ACE_Refcounted_Auto_Ptr) for QueryResult pointers. Use this auto_ptr for every DB queries(except QueryNamedResult yet). This patch guarantees NO memory leaks from QueryResult pointers. Thanks to raczman for the idea and for the helping to make this patch. --HG-- branch : trunk --- src/shared/Database/SqlOperations.cpp | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) (limited to 'src/shared/Database/SqlOperations.cpp') diff --git a/src/shared/Database/SqlOperations.cpp b/src/shared/Database/SqlOperations.cpp index 1012c94cbdd..793fabecde7 100644 --- a/src/shared/Database/SqlOperations.cpp +++ b/src/shared/Database/SqlOperations.cpp @@ -109,7 +109,7 @@ bool SqlQueryHolder::SetQuery(size_t index, const char *sql) } /// not executed yet, just stored (it's not called a holder for nothing) - m_queries[index] = SqlResultPair(strdup(sql), NULL); + m_queries[index] = SqlResultPair(strdup(sql), QueryResult_AutoPtr(NULL)); return true; } @@ -136,7 +136,7 @@ bool SqlQueryHolder::SetPQuery(size_t index, const char *format, ...) return SetQuery(index,szQuery); } -QueryResult* SqlQueryHolder::GetResult(size_t index) +QueryResult_AutoPtr SqlQueryHolder::GetResult(size_t index) { if(index < m_queries.size()) { @@ -150,10 +150,10 @@ QueryResult* SqlQueryHolder::GetResult(size_t index) return m_queries[index].second; } else - return NULL; + return QueryResult_AutoPtr(NULL); } -void SqlQueryHolder::SetResult(size_t index, QueryResult *result) +void SqlQueryHolder::SetResult(size_t index, QueryResult_AutoPtr result) { /// store the result in the holder if(index < m_queries.size()) @@ -167,11 +167,7 @@ SqlQueryHolder::~SqlQueryHolder() /// if the result was never used, free the resources /// results used already (getresult called) are expected to be deleted if(m_queries[i].first != NULL) - { free((void*)(const_cast(m_queries[i].first))); - if(m_queries[i].second) - delete m_queries[i].second; - } } } -- cgit v1.2.3