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_
无效。
我需要将数据库连接传递给新的对象实例。但是,以下代码无法正常工作。
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_
无效。