如果我理解正确,我们至少有两种不同的实现构图的方法。 (与智能指针实现的情况不为简单起见,我几乎不使用STL,没有欲望去学习它。)如何在C++中实现类组合?
让我们来看看维基百科example:
class Car
{
private:
Carburetor* itsCarb;
public:
Car() {itsCarb=new Carburetor();}
virtual ~Car() {delete itsCarb;}
};
所以,这是一种方法 - 我们有一个作为私人成员指向对象的指针。 我们可以把它改写成这样:
class Car
{
private:
Carburetor itsCarb;
};
在这种情况下,我们有一个对象本身作为私有成员。 (顺便说一下,从术语的角度来看,我是否有权将这个实体称为对象?)
在第二种情况下,隐式调用默认构造函数不是强制性的(如果需要调用非默认构造函数可能在初始化列表中执行它)和析构函数。但它不是一个大问题...
当然,在某些方面,这两种情况的差异更明显。例如,禁止在第二种情况下从Car类的常量方法中调用化油器实例的非常量方法...
是否有任何“规则”来决定使用哪一个?我错过了什么吗?
我想你的意思是“这是被禁止调用由Car类的常量方法化油器实例的非const方法”。 –
@ Laurence Ooops。你当然是对的...... – Wildcat
“[我]不想学习[STL]。”什么?通过忽略STL,你错过了C++的一大部分。 – rlbond