我正在爲sqlite做一個小包裝類。爲了從數據庫獲取數據,我有一個名爲SQLiteValue的類。當爲查詢綁定數據時,SQLiteValue實例將在堆棧上創建並傳遞給幾個函數。下面是課程的骨架輪廓。被稱爲多次的C++析構函數
class SQLiteValue : public SQLiteObject
{
private:
// stores a pointer to the data contained (could be of varying types)
union
{
int* i;
double* d;
std::string* s;
std::wstring* ws;
BYTE* b;
} pdata;
int type;
public:
SQLiteValue(const char* val);
SQLiteValue(const wchar_t* val);
.. and so on for varying types
virtual ~SQLiteValue();
};
該對象由幾個重載的構造函數之一創建。構造函數根據它們的類型實例化pdata的「成員」。這是這個班的重要內容。現在,這個問題。我有構造函數重載,所以我得到乾淨的方法調用,並不需要顯式調用SQLiteValue(xxx)。因此,我不想使用函數的引用,所以我將它們定義爲。
void BindValue(const char* name, SQLiteValue value)
query->BindValue(":username", "user2"); // the "clean" method call
聲明他們這樣使被實例化每一次一個新的對象(或類似的東西?)我調用一個函數,因此析構函數釋放分配的分頁尋址。這不好。
我想知道的是這個。有沒有更好的方式來實現我想要做的事情,同時保留我的乾淨方法調用?目前我有私人功能,通過引用解決問題,但我不太喜歡這種方法。我很容易忘記參考資料,最終我會再次追查這個問題。
謝謝。
嗯,這是按值傳遞所以它會創建'「用戶2」'臨時,然後將其複製到'這是在'BindValue'使用value'。然後在函數的末尾調用析構函數,然後在'query - > ...' – 2012-07-12 11:02:55