Ich versuche, einen einfachen Wrapper um einen Verbindungszeiger zu schreiben, der ihn an den Pool zurückgibt, wenn der Wrapper zerstört wird, aber nicht kompiliert, da ConnectionPool und AutoConn sich gegenseitig benötigen erklärt werden.Kompilieren von C++, wenn zwei Klassen aufeinander verweisen
Ich versuchte, Vorwärtsverzögerung zu verwenden, aber es hat nicht funktioniert. Wie löse ich das? (Mit 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);
}
};
Design weise ist dies eine schlechte Idee, sollten Sie versuchen, die zirkuläre Abhängigkeit zu entfernen! – NomeN
Nun, es ist ein lokales Problem und der Vorteil, sich nicht um die Freigabe der Verbindung kümmern zu müssen (angesichts möglicher Ausnahmen), überwiegt bei weitem die "Schlechtigkeit" dieses Designproblems. –
möglich duplicate von http://stackoverflow.com/questions/2233149/two-classes-and-inline-functions –