我必须明确地调用Destructor

时间:2011-04-27 04:18:18

标签: c++ singleton destructor

class TsDatabasePool
{
private:
    TsDatabasePool(int numDBConn, std::string& DBName, std::string& DBType);
            static  TsDatabasePool* objInst_;             
public:
           ~TsDatabasePool();               
    QSqlDatabase* borrowFromPool();      
    void returnToPool(QSqlDatabase*);
static bool createInstance(std::string& DBName, std::string& DBType);
static TsDatabasePool* getInstance();

};

我的析构函数不是隐式调用的。使用的对象实例objInst_在私有构造函数中分配。我不想在任何现有函数中调用析构函数或调用delete objInst_。谁能告诉我应该怎么做

4 个答案:

答案 0 :(得分:2)

您可以使用std :: auto_ptr< TsDatabasePool>模板而不是原始指针。 std :: auto_ptr模板将在应用程序出口处自动调用指针上的operator delete。

答案 1 :(得分:2)

我相信你在这里要做的就是摧毁一个单身对象 它可以在单线程环境中完成如下:

void TsDatabasePool::Destroy()  
{   
    if (objInst_) 
    {        
        delete objInst_;       
        objInst_= 0x0;   
    } 
} 

理想情况下,你可以使用像shared_ptr这样的东西来确保对象保持不变,直到没有人再需要它为止。

答案 2 :(得分:0)

在取消分配objInst_之前,您无法为该变量调用析构函数。您需要delete肯定。

答案 3 :(得分:0)

释放内存并调用objInst_的析构函数的正确方法是调用

delete objInst_;

不幸的是,你不能(不应该)调用析构函数,除非你删除它。这是C ++语言设计的一部分。

由于objInst_是静态的,您需要添加“static void shutdown()”方法并在代码中的某个位置调用它或使用atexit函数注册它。

编辑:已实现objInst_是静态的。