将字段(在类中)定义为引用有哪些缺点?
例如:
template <typename T>
class A {
T& x;
public:
//....
}
此外,在定义引用成员时是否需要做一些特殊的事情?
答案 0 :(得分:-1)
引用成员(无提示)破坏了值的语义,因为分配给引用不会重新指向引用。出于这个原因,有些人避免使用参考成员。
例如
int a = 1, b = 2;
int& r1 = a;
int& r2 = b;
r1 = r2; // does a = b
// r1 still refers to a
// r2 still refers to b
答案 1 :(得分:-2)
让我们看一个示例,该示例显示了将引用作为类的成员的缺点:
template <typename T>
A<T>::A(T & obj) : x(obj) {} // constructor (this would probably go in the header)
int main(void) {
int * num = new int;
*num = 42;
A<int> a(*num); // a.x references *num
delete num; // uh-oh, *num is no longer valid and a.x cannot rebind
return 0;
}
当然,如果将成员变量声明为T x;
,则x
将是T
的另一个实例,即使在{之后,也可以存储*num
的数据副本{1}}被删除。