मैं एक कनेक्शन सूचक के चारों ओर एक साधारण रैपर लिखने की कोशिश कर रहा हूं जो रैपर नष्ट होने पर इसे पूल में वापस कर देगा, लेकिन यह संकलित नहीं होगा क्योंकि कनेक्शनपूल और ऑटोकॉन को एक दूसरे की आवश्यकता है घोषित किया जानादो कक्षाएं एक दूसरे से संदर्भित करती हैं
मैंने आगे मंदी का उपयोग करने की कोशिश की लेकिन यह काम नहीं किया। मैं इसे कैसे हल करूं? (छ का उपयोग कर ++) आगे घोषणा
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);
}
};
डिज़ाइन के अनुसार यह एक बुरा विचार है, आपको परिपत्र निर्भरता को हटाने का प्रयास करना चाहिए! – NomeN
अच्छी तरह से, यह एक स्थानीय मुद्दा है और कनेक्शन को रिलीज़ करने के बारे में चिंता करने का लाभ (संभावित अपवादों के मुकाबले) इस डिजाइन की समस्या की "बुराई" से कहीं अधिक है। –
http://stackoverflow.com/questions/2233149/two-classes-and-inline-functions –