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_。谁能告诉我应该怎么做
答案 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_是静态的。