c ++在构造函数中分配对property的引用

时间:2016-12-01 10:46:30

标签: c++ constructor reference variable-assignment

我需要将数据库连接传递给新的对象实例。但是,以下代码无法正常工作。

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;
    ...

因为必须初始化或分配引用。这是一个艰难的情况。

2 个答案:

答案 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_无效。