我需要将数据库连接传递给新的对象实例。但是,以下代码无法正常工作。
class child {
public:
db_connection Con;
child(db_connection& Con);
};
child::child(db_connection& Con) {
this->Con = Con;
}
构造函数中的赋值会引发此错误:使用已删除的函数....
我知道这意味着它正在调用db_connection的构造函数来创建Con的新对象。但那不是我想要的。
我不能在类声明中将属性'Con'声明为
class child {
public:
db_connection& Con;
...
因为必须初始化或分配引用。这是一个艰难的情况。
答案 0 :(得分:4)
如您所述,为了能够使用引用,您需要初始化它。为此,您应该使用构造函数初始化列表:
class child {
db_connection& Con;
public:
child(db_connection& con) : Con(con)
{}
...
};
初始化成员变量,而不是在构造函数中分配给它。
答案 1 :(得分:1)
如果child
允许在构造时传递给它的连接实例的所有权,那么您可以使用移动构造函数:
child(db_connection&& Con_) : Con(std::move(Con_)){}
它避免了值副本和潜在引用的潜力。这使传递给构造函数的Con_
无效。