假设我创建了一个
CDatabase
和A
CStatement
上课。这个
C声明
类依赖于
CDatabase公司
类的一些句柄。
class CDatabase
{
public:
SQLHENV m_hEnv;
SQLHDBC m_hDBC;
CDatabase()
{
}
~CDatabase()
{
FreeHandles();
}
void FreeHandles()
{
}
}
class CStatement
{
public:
SQLHSTMT m_hStmt;
CDatabase* m_pDatabase;
CStatement(CDatabase* pDatabase)
{
m_pDatabase = pDatabase;
}
~CStatement()
{
FreeHandles();
}
void FreeHandles()
{
}
}
重要的是
C声明
释放它的手柄之前
CDatabase公司
做。
问题是如果两个对象都在一个方法中声明为本地的,那么对于哪个对象将首先调用它的析构函数存在一些问题。
我的一个想法是
C声明
打电话给
RegisterStatement
方法
CDatabase公司
. 这边,如果
CDatabase公司
析构函数首先被调用,它可以在任何
C声明
依赖于它的对象在释放自己的句柄之前。我也可以加一个
UnregisterStatement
那个
C声明
可以从它的析构函数调用所以
CDatabase公司
如果它先被摧毁了就不会叫它了。
但是打电话给
注销声明
方法是不可靠的,因为
CDatabase公司
类已被销毁。
有人知道解决这个问题的可靠方法吗?