我需要在c++ linux中进行澄清。
我有一个C1类
和另一个C2类
。 C1类
将拥有对C2类
的引用。
class C1
{
C2 &obj ;
}
我在考虑两个选择:
- 直接将
C2
的引用保存为C2 &obj;
- 创建
C2
的指针,如c2* obj;
哪个更好?它们有什么区别?选择哪个?
我需要在c++ linux中进行澄清。
我有一个C1类
和另一个C2类
。 C1类
将拥有对C2类
的引用。
class C1
{
C2 &obj ;
}
我在考虑两个选择:
C2
的引用保存为C2 &obj;
C2
的指针,如c2* obj;
哪个更好?它们有什么区别?选择哪个?
两者都不好。如果您有任何指向类外分配的东西的指针或引用成员变量,那么这很可能意味着程序设计在某种程度上存在缺陷。
我能想到的一个合理情况是,当您具有某种特殊的外部垃圾收集器功能时。(例如C++ Builder自动分配/释放堆上的VCL组件。)
另一种情况是,在模拟C结构的C++类或在另一个类中编写私有类时,可能会有效。
但是,最有可能的是,需要指向类外部的东西来自于有缺陷的程序设计。我会仔细考虑我的代码为什么需要这样做,并尽可能添加const正确性到指针,即const *c2 const obj;
如果您有这样的特殊成员指针,则还必须手动编写类的复制构造函数、赋值运算符和析构函数。
要使用哪一个取决于你需要什么。
例如,如果你需要某种依赖注入,可以使用引用成员变量。即使如此,你也可以使用指针。但是请记住,具有引用成员的类通常应该是不可复制的。
在大多数情况下,你应该使用指针或值成员变量。