C++在构造函数中分配对属性的引用
我需要将数据库连接传递给新的对象实例。但是,下面的代码不按想要的那样工作。C++在构造函数中分配对属性的引用
class child {
public:
db_connection Con;
child(db_connection& Con);
};
child::child(db_connection& Con) {
this->Con = Con;
}
在构造函数中的赋值引发此错误:使用删除功能....
我知道这意味着它调用db_connection的构造函数来创建精读的新对象。但那不是我想要的。
我不能在声明类声明的属性“精读”作为
class child {
public:
db_connection& Con;
...
因为引用必须初始化或分配。这是一个困难的情况。
如您所述,为了能够使用参考,您需要初始化它。对于您应该使用构造函数初始化列表:
class child {
db_connection& Con;
public:
child(db_connection& con) : Con(con)
{}
...
};
这初始化成员变量,而不是在构造函数中分配给它。
如果child
被允许采取传递给它的建筑连接实例的所有权,那么你可以使用一个转移构造:
child(db_connection&& Con_) : Con(std::move(Con_)){}
其消除的值复制和一个悬而未决的参考的潜力。这使传递给构造函数的Con_
无效。
是的,传入的变量是公开的 – johnlowvale
在这种情况下,这个答案就像独木舟的陷阱门一样有用。我会留下它,因为它可能在其他情况下有用。 – Bathsheba
这个事实很可怕:“这会使传递给构造函数的Con_无效。”变量的原始拥有者不能再使用这个变量了吗?似乎无法将同一个Con_传递给第二个孩子 – johnlowvale
如何通过2个或更多变量? :CON(CON),VAR(VAR),...? – johnlowvale
哦,我发现它,逗号分隔 – johnlowvale
它仍然是“使用删除的函数...”:错误:使用删除的函数'mongocxx :: v_noabi :: client :: client(const mongocxx :: v_noabi :: client&)' Db_Client(Db_Client _),Request(Request _),Response(Response_) – johnlowvale