Tôi đang cố gắng viết một trình bao bọc đơn giản xung quanh một con trỏ kết nối sẽ trả về hồ bơi khi trình bao bọc bị hủy, nhưng nó sẽ không biên dịch vì ConnectionPool và AutoConn cần nhau được khai báo.Soạn thảo C++ khi hai lớp tham chiếu đến nhau
Tôi đã cố gắng sử dụng giảm tốc chuyển tiếp nhưng không hoạt động. Tôi giải quyết điều này như thế nào? (Sử dụng 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);
}
};
thiết kế khôn ngoan đây là ý tưởng BAD, bạn nên cố gắng loại bỏ phụ thuộc vòng tròn! – NomeN
tốt, đó là một vấn đề địa phương hóa và lợi ích của việc không phải lo lắng về việc phát hành kết nối (đối mặt với trường hợp ngoại lệ có thể) vượt xa "xấu" của vấn đề thiết kế này. –
có thể trùng lặp của http://stackoverflow.com/questions/2233149/two-classes-and-inline-functions –