Added a copy constructor that increments the reference counter, thanks to a patch from Mark P.

This commit is contained in:
Sébastien Rombauts 2012-12-05 17:36:02 +01:00
parent 0055fcc2db
commit 554a79b64d
2 changed files with 23 additions and 8 deletions

View File

@ -16,10 +16,22 @@ namespace SQLite
// Encapsulation of a Column in a Row of the result. // Encapsulation of a Column in a Row of the result.
Column::Column(sqlite3* apSQLite, sqlite3_stmt* apStmt, unsigned int* apStmtRefCount, int aIndex) throw() : // nothrow Column::Column(sqlite3* apSQLite, sqlite3_stmt* apStmt, unsigned int* apStmtRefCount, int aIndex) throw() : // nothrow
mpSQLite(apSQLite), mpSQLite (apSQLite),
mpStmt(apStmt), mpStmt (apStmt),
mpStmtRefCount(apStmtRefCount), mpStmtRefCount (apStmtRefCount),
mIndex(aIndex) mIndex (aIndex)
{
// Increment the reference counter of the sqlite3_stmt,
// telling the Statement object not to finalize the sqlite3_stmt during the lifetime of this Column objet
(*mpStmtRefCount)++;
}
// Copy constructor
Column::Column(const Column& copy) throw() : // nothrow
mpSQLite (copy.mpSQLite),
mpStmt (copy.mpStmt),
mpStmtRefCount (copy.mpStmtRefCount),
mIndex (copy.mIndex)
{ {
// Increment the reference counter of the sqlite3_stmt, // Increment the reference counter of the sqlite3_stmt,
// telling the Statement object not to finalize the sqlite3_stmt during the lifetime of this Column objet // telling the Statement object not to finalize the sqlite3_stmt during the lifetime of this Column objet

View File

@ -30,9 +30,12 @@ public:
* @brief Compile and register the SQL query for the provided SQLite Database Connection * @brief Compile and register the SQL query for the provided SQLite Database Connection
*/ */
explicit Column(sqlite3* apSQLite, sqlite3_stmt* apStmt, unsigned int* apStmtRefCount, int aIndex) throw(); // nothrow explicit Column(sqlite3* apSQLite, sqlite3_stmt* apStmt, unsigned int* apStmtRefCount, int aIndex) throw(); // nothrow
/// Basic destructor /// Simple destructor
virtual ~Column(void) throw(); // nothrow virtual ~Column(void) throw(); // nothrow
/// @brief copy constructor : only way to copy a valid instance
Column(const Column& aOther) throw(); // nothrow
/// Return the integer value of the column. /// Return the integer value of the column.
int getInt (void) const throw(); int getInt (void) const throw();
/// Return the 64bits integer value of the column. /// Return the 64bits integer value of the column.
@ -78,9 +81,9 @@ public:
#endif #endif
private: private:
// Column is copyable, but copy should not be used elsewhere than in return form getColumn // Forbid default constructor and assignment operator (no implementation)
// so that there is no way of having a Column instance not initialized
Column(void); Column(void);
// TODO Column(const Column&);
Column& operator=(const Column&); Column& operator=(const Column&);
private: private: