C++:更好地保留引用或指针?

标签 c++ pointers reference

<分区>

这可能被视为风格问题。我有一个保留对另一个类实例的引用的类:

class A { };

class B {
  A& ref;

public:
  explicit B(A& ref) : A(ref) { }
};

我决定使用引用而不是指针,因为 ref 永远不可能是空指针。此外,代码看起来更漂亮。

但是,用户不知道我是否复制了 A 对不对?在这种情况下,我不复制,所以如果 A 被销毁而 B 的实例仍然存在,就会出现问题。如果您使用指针,那么当然会发生同样的情况,但我觉得用户在编写代码时会意识到没有进行任何复制。

对此有何看法?处理此问题的最佳 C++ 方法是什么?

PS.: 我想到的一个解决方案是让指针保持不变,但如果它指向的对象被销毁,那么首先制作一个拷贝。这并不难实现,但关键是:额外的麻烦值得吗?开销是否值得?这种自制的引用计数器真的是人做的吗?

最佳答案

如果 B 只能使用 A 的一个实例,并且该实例永远不会改变,那么引用就有意义了。因此,B 不能在没有 A 实例的情况下构造 - 您引入了紧密耦合。

但是,如果您可以拥有一个独立于 AB 实例,则将其设为指针 - 这将允许您设置 A 的实例 稍后根据需要。无论哪种方式,您都必须保证 A 的生命周期;避免这种情况(生命周期控制)的唯一方法是使用智能指针来管理 A 的生命周期。

关于C++:更好地保留引用或指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16667014/

相关文章:

c++ - 在运行时确定返回类型是右值还是左值时,如何避免不必要的复制?

c++ - 无法从 QQmlPropertyMap 的子类中的 QML 调用插槽或 Q_INVOKABLE

c++ - 将我的 c++ 程序的数据保存在 linux 文件系统中的什么位置以便能够访问它?

c++ - 为什么指向 vector 中变量的指针保持有效?

C++,指向整数比较错误的指针

c++引用作为私有(private)变量的简写

c++ - 在代码块中运行发布版本时出现段错误,但运行调试版本时不会出现段错误

c++ - 为什么这个正则表达式不会编译?

c - 返回指针并在 C 中释放它时发生内存泄漏

c++是否在需要时将引用隐式转换为值?