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

Is it possible to initialize new object in constructor's initialization list and reference it?

本文关键字:初始化 对象 引用 构造函数 是否 列表 新对象      更新时间:2023-10-16

客户端是DLL的顶级类,所以我需要在它的初始化中创建并传递新的会话对象以创建请求器并且会话应分配给同一会话。可能吗?

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对象。我认为这是一个错误。