是否可以在构造函数的初始化列表中初始化新对象并引用它?
客户是一流的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;
};
这是可能的,但有点脆弱,因为初始化顺序取决于成员的声明顺序。提供这些留在你的榜样,你可以简单地做
class Client()
{
public:
Client() : requestor(session) // session is implicitly default constructed
{}
private:
Session session;
Requestor requestor;
};
注:目前尚不清楚为什么你实例在构造函数的局部Session
对象。我认为这是一个错误。
谢谢。的确,那是因为我习惯了c#。 – Dork
也许我只是误解了'分配给同一会话'的OP意思,而是取决于'Requestor'在其构造函数中的作用,'Client'和'Requestor'可能每个都有'Session'的副本而不是'被分配到同一个'。 – kamilk
@kamilk这取决于内部的'请求者',这些都没有显示。它不依赖于'Client'或其构造函数。 – juanchopanza
为什么不使用'session'成员,你已经有'requestor'初始化? –
如果你想让它们引用同一个对象,你将需要指针。 – kamilk
@kamilk平淡无味,没有任何需要的指针。 –