我必须显式调用析构函数
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_ 。谁能告诉我我该怎么办
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();
};
My destructor is not called implicitly. Object instance used objInst_ is allocated in private constructor. I dont want to call destructor or call delete objInst_ inside any existing function. Can anyone tell me what should i do
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
在释放 objInst_ 之前,您无法调用该变量的析构函数。您确实需要
删除
它。Until you deallocate
objInst_
, you can not call the destructor for that variable. You need todelete
it for sure.释放内存并调用 objInst_ 析构函数的正确方法是调用
不幸的是,您不能(不应该)调用析构函数,除非您也删除它。这是C++语言设计的一部分。
由于 objInst_ 是静态的,因此您需要添加一个“static void shutdown()”方法,并在代码中的某个时刻调用它,或者使用 atexit 函数。
编辑:意识到 objInst_ 是静态的。
The correct way to free memory and call the destructor for objInst_ is to call
Unfortunately, you cannot (should not) call the destructor unless you also delete it. This is part of the design of the C++ language.
Since objInst_ is static you will need to add a "static void shutdown()" method and call it at some point in your code or register it with atexit function.
Edit: realized objInst_ is static.
您可以使用 std::auto_ptr;模板而不是原始指针。 std::auto_ptr 模板将在应用程序退出时自动调用指针上的运算符删除。
You can use std::auto_ptr<TsDatabasePool> template instead of raw pointer. std::auto_ptr template will call operator delete on your pointer automatically at application exit.
我相信你在这里试图做的是销毁一个单例对象。
在单线程环境中可以按如下方式完成:
理想情况下,您可以使用诸如shared_ptr之类的东西来确保对象一直存在,直到没有人再需要它为止。
I believe what you are trying to do here is destroy a singleton object.
It can be done as follows in a Singlethreaded Enviornment:
Ideally, You can use something like shared_ptr to ensure that the object stays around until no-one needs it any more.