Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 是否可以在构造函数中初始化新对象';s初始化列表并引用它?_C++_Initialization - Fatal编程技术网

C++ 是否可以在构造函数中初始化新对象';s初始化列表并引用它?

C++ 是否可以在构造函数中初始化新对象';s初始化列表并引用它?,c++,initialization,C++,Initialization,客户端是DLL的顶级,因此我需要在初始化时创建并传递新的会话对象,以创建请求者,会话应分配给同一会话。可能吗 class Session { public:Session() {} }; class Requestor { public: Requestor(const Session& session) {}; }; class Client { public:Client() { Session newSession; requestor = Requestor

客户端是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;
};

注意:不清楚为什么要在构造函数中实例化本地
会话
对象。我认为这是一个错误。

为什么不使用
会话
成员?您已经必须初始化
请求者
?如果您希望他们引用相同的对象,您将需要指针。@kamilk纯属胡说八道,不需要任何指针。谢谢。事实上,这是因为我曾经使用c#。也许我只是误解了OP所说的“分配给同一个会话”的含义,但这取决于请求者在其构造函数中所做的工作,
客户端
请求者
很可能都有一份
会话
的副本,而不是“分配给同一个”.@kamilk,这取决于内部
请求者
,未显示。它不依赖于
客户端
或其构造函数。