我通讀了很多循環依賴主題,但他們都似乎關心聲明。我很感興趣如何構建相互依賴的對象,以及我的方法是否存在潛在的缺陷。考慮一個簡單的例子:C++循環依賴:構造函數應該是什麼樣子?
#include <iostream>
#include <vector>
using namespace std;
class A; //Forward declaration
class B{
public:
B(string name, A* a):myA(a), name(name){
cout << "Works with pointer" << endl;
};
private:
A* myA;
string name;
};
class A{
public:
A(){
cout << "Constructing A" << endl;
if(bs.empty()) cout << "Vector is empty" << endl;
bs.push_back(B("First", this));
cout << "Array has " << bs.size() << " elements." << endl;
};
private:
std::vector<B> bs;
};
int main() {
cout << "Start" << endl;
A a;
cout << "Ok." << endl;
return 0;
}
有什麼事情我可以做,以避免B
的A*
指針?
理想情況下,我想有一個參考,但如果我改變的B
構造函數B(string name, A& a)
,然後的push_back改變bs.bush_back(B("First", *this));
我得到一個錯誤:non-static reference member 'A& B::myA', can't use default assignment operator
。 See the modified example
據我所知operator=
由編譯器合成不適合在這裏。 operator=
將如何看起來像?還是我一起走錯了方向?
如果您有圓形依賴關係,那麼你應該刪除它,而不是尋找更多的解決方法。 –
嗯,我的(語言不可知的)域模型具有循環依賴性。有什麼方法可以解決課堂設計水平上的問題嗎? – sebastiangeiger