首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在类中初始化引用属性

如何在类中初始化引用属性
EN

Stack Overflow用户
提问于 2010-03-05 11:18:48
回答 5查看 7.6K关注 0票数 2

我有一个类,它有一个私有属性,它是对另一个类的引用:

代码语言:javascript
复制
class A {
public:
   A(); 
   A(B& anotherB);
private:
  B& bRef;
}

在我的A(B& anotherB)中,我可以这样做:

代码语言:javascript
复制
  A::A(B& anotherB)
   : bRef(anotherB) {
}

但是A()又如何呢?我试过这个:

代码语言:javascript
复制
   A::A()
    : bRef(B()) {}

但我得到这个错误' error :从类型‘B’的临时变量中初始化类型‘B&’的非常数引用无效。

如何使用B的默认构造函数在A中调用initialize B引用?

谢谢。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-03-05 11:21:03

你必须有一个真实的实例来初始化它。说: bRef(B())创建了一个临时的,它会立即被销毁,因此你的引用将是一个不再存在的对象,从而编译器错误。

你不需要初始化它,除非你基于它没有被初始化而做一些决定。在这种情况下,您可以使用bool initialized;成员来跟踪状态。

如果您想将其初始化为类似于NULL的值,请改用指针。

票数 3
EN

Stack Overflow用户

发布于 2010-03-05 11:45:37

如果你真的,真的想要使用一个引用,但仍然保留你的默认构造函数,你可以设置一个B的全局(或文件静态)实例,它代表一个空状态或默认状态,无论你想让你的默认A使用什么。

代码语言:javascript
复制
A::A()
: bRef(nullB) {}
票数 1
EN

Stack Overflow用户

发布于 2010-03-05 11:25:32

如果您知道引用字段始终包含有效的引用,则应该使用引用字段对类进行建模。在你的例子中,你有一个默认的构造函数,你想让你的引用指向一个虚拟值,它应该更适合用指针字段来建模。您不能将NULL赋值给引用,也不能将其指向堆栈上创建的对象,并且该对象仅在作用域内有效。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2384360

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档