c++ - 可选引用实现

标签 c++ c++11

我在这里遇到一个问题,我不确定如何处理它。首先我是初学者。我有一个类的两个构造函数和声明的两个引用变量,但我不能在一个构造函数中同时使用这两个引用。如果调用 cons1(),我需要使用 ref1,如果调用 cons2,我需要使用 ref2。问题在于当调用 cons2 时我应该将 ref1 引用到什么以及类似地当调用 cons1 时 ref2 应该引用什么。我不确定如何初始化这些引用。它不能为 NULL。我不确定指出一些无效的实现是否是个好主意。应该是?这甚至是一个选择吗?在c++中如何处理这样的问题?

// A.cpp
Class A
A(Object1& a) : ref1(a) {}   - here how should ref2 be handled?
A(Object2& b) : ref2(b) {}- here what should ref1 reference?

// A.h
Object1& ref1
Object2& ref2

我需要在这里使用引用。我知道我们可以使用指针而不是引用,但问题是特定于使用引用的。

最佳答案

既然 ref1 和 ref2 是可选的(不是必需的),那么最好使用指针而不是引用:

class A
{
  public:
    A(Object1& a) : ref1(&a), ref2(NULL) {}
    A(Object2& b) : ref1(NULL),ref2(&b) {}

 Object1 *ref1;
 Object2 *ref2;
};

但稍后您必须检查 ref1 和 ref2 是否为 NULL。

关于c++ - 可选引用实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6726163/

相关文章:

c++ - 为什么 shared_ptr 引用计数对象也需要跟踪指向该对象的 weak_ptr 上的数字?

c++ - 用于在 log(N) 时间内查找连续项目的算法

c++ - 为什么这个函数将 RAX 插入堆栈作为第一个操作?

c++ - 关于非聚合结构的初始化

c++ - 使用可变参数宏生成数组

c++ - 为什么在给定 T&& 和 const T& 重载的情况下,const 左值与 const 右值的绑定(bind)不同?

c++11 - 为什么在编译时不评估 constexpr (MSVC 2015)?

c++ - 将迭代器作为 3 个元素的滑动窗口,可以越过边界(可能使用 Boost)

c++ - 返回类时警告 : control may reach end of non-void function?

c++ - std::function 表达式不会产生接受 1 个参数的函数