是否可以在构造函数的初始化列表中初始化新对象并引用它?

问题描述:

客户是一流的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平淡无味,没有任何需要的指针。 –

这是可能的,但有点脆弱,因为初始化顺序取决于成员的声明顺序。提供这些留在你的榜样,你可以简单地做

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