C++ 在构造函数中分配对 属性 的引用

c++ assign a reference to property in constructor

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

class child {
  public:
    db_connection Con;
    child(db_connection& Con);
};

child::child(db_connection& Con) {
  this->Con = Con;
}

构造函数中的赋值引发此错误:使用已删除的函数....

我知道这意味着它正在调用 db_connection 的构造函数来创建 Con 的新对象。但这不是我想要的。

而且我无法在 class 声明中将 属性 'Con' 声明为

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