2016-02-13 69 views
-1

客戶是一流的DLL,所以我需要創建和傳遞新的Session對象在它的初始化創建請求會議應該被分配到同一個會話。可能嗎?是否可以在構造函數的初始化列表中初始化新對象並引用它?

class Session 
{ 
public:Session() {} 

}; 

class Requestor 
{ 
public: Requestor(const Session& session) {}; 
}; 

class Client 
{ 
public:Client() 
{ 
    Session newSession; 
    requestor = Requestor(newSession); 
} 

private: 
    Session session; 
    Requestor requestor; 
}; 
+0

爲什麼不使用'session'成員,你已經有'requestor'初始化? –

+0

如果你想讓它們引用同一個對象,你將需要指針。 – kamilk

+1

@kamilk平淡無味,沒有任何需要的指針。 –

回答

2

這是可能的,但有點脆弱,因爲初始化順序取決於成員的聲明順序。提供這些留在你的榜樣,你可以簡單地做

class Client() 
{ 
public: 
    Client() : requestor(session) // session is implicitly default constructed 
    {} 
private: 
    Session session; 
    Requestor requestor; 
}; 

注:目前尚不清楚爲什麼你實例在構造函數的局部Session對象。我認爲這是一個錯誤。

+0

謝謝。的確,那是因爲我習慣了c#。 – Dork

+0

也許我只是誤解了'分配給同一會話'的OP意思,而是取決於'Requestor'在其構造函數中的作用,'Client'和'Requestor'可能每個都有'Session'的副本而不是'被分配到同一個'。 – kamilk

+0

@kamilk這取決於內部的'請求者',這些都沒有顯示。它不依賴於'Client'或其構造函數。 – juanchopanza

相關問題