【发布时间】:2016-11-05 22:49:02
【问题描述】:
假设我有一个类,其中一个成员变量是另一个复杂类。我想避免创建这个复杂类的副本,我只想在我的类中使用它。那么组织 MyClass 的最佳方式是什么?
目前我有这样的事情:
class MyClass
{
public:
MyClass(const ComplexClass& complex_class)
: m_class(complex_class) {}
private:
const ComplexClass& m_class; // What is the best practice here?
};
我可以这样做吗?或者也许 m_class 应该是一个指针?或者在这种情况下你会怎么做?
【问题讨论】:
-
我将构造函数写为
explicit MyClass(const ComplexClass* p) : m_class(*p) {}以避免令人讨厌的意外。 -
@Kerrek SB 有什么惊喜?
-
您当然可以这样做,前提是传入的引用保持在范围内,并且在类不再需要它之前不会破坏引用的对象。但如果没有保证引用保持有效的合同,则必须复制对象。
-
这太宽泛了。 C++ 中的资源管理是一个很大的话题,不可能用一个 SO 答案(或十个)来解释。
-
@AlexShirokov:就像悬空引用和无意的隐式转换......