当两个类相互引用时编译C++

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)

Cli*_*ord 6

前向声明和声明分离与具有循环依赖性的成员定义的组合起作用.例如:

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)