Omr*_*dan 5 c++ circular-dependency forward-declaration
我试图围绕一个连接指针编写一个简单的包装器,当包装器被销毁时它会将它返回到池中,但它不会编译,因为ConnectionPool和AutoConn需要相互声明.
我试图使用前向减速但它不起作用.我该如何解决这个问题?(使用g ++)
class Connection {};
class ConnectionPool
{
Connection *m_c;
public:
AutoConn getConn()
{
return AutoConn(this, m_c); // by value
}
void releaseConnection(Connection *c)
{
}
};
class AutoConn
{
ConnectionPool* m_pool;
Connection *m_connection;
public:
AutoConn(ConnectionPool* pool, Connection *c) : m_pool(pool), m_connection(c) {}
~AutoConn()
{
m_pool->releaseConnection(m_connection);
}
};
Run Code Online (Sandbox Code Playgroud)
前向声明和声明分离与具有循环依赖性的成员定义的组合起作用.例如:
class Connection {};
class ConnectionPool ;
class AutoConn
{
ConnectionPool* m_pool;
Connection *m_connection;
public:
AutoConn(ConnectionPool* pool, Connection *c) : m_pool(pool), m_connection(c) {}
~AutoConn() ; // Not defined here because it accesses unknown members of class Connection
} ;
class ConnectionPool
{
Connection *m_c;
public:
AutoConn getConn()
{
return AutoConn(this, m_c); // by value
}
void releaseConnection(Connection *c)
{
}
};
// Definition of destructor with class Connection member dependencies.
AutoConn::~AutoConn()
{
m_pool->releaseConnection(m_connection);
}
Run Code Online (Sandbox Code Playgroud)