如果我理解正确,我们至少有两种不同的实现组合的方式。(为简单起见,排除使用智能指针的实现情况。我几乎不使用STL,也没有学习的欲望。)
让我们来看看维基百科上的示例:
在这种情况下,我们有一个对象本身作为私有成员。(顺便问一句,从术语角度来看,我称这个实体为对象是正确的吗?)
在第二种情况下,不必隐式调用默认构造函数(如果需要调用非默认构造函数,可以在初始化列表中进行),也不必调用析构函数。但这并不是一个大问题...
当然,在某些方面,这两种情况有更明显的差异。例如,在第二种情况下,禁止从Car类的const方法中调用Carburetor实例的非const方法...
是否有“规则”来决定使用哪种方法?我有什么遗漏吗?
让我们来看看维基百科上的示例:
class Car
{
private:
Carburetor* itsCarb;
public:
Car() {itsCarb=new Carburetor();}
virtual ~Car() {delete itsCarb;}
};
因此,这是一种方式 - 我们将对象指针作为私有成员。 可以将其重写为以下形式:
class Car
{
private:
Carburetor itsCarb;
};
在这种情况下,我们有一个对象本身作为私有成员。(顺便问一句,从术语角度来看,我称这个实体为对象是正确的吗?)
在第二种情况下,不必隐式调用默认构造函数(如果需要调用非默认构造函数,可以在初始化列表中进行),也不必调用析构函数。但这并不是一个大问题...
当然,在某些方面,这两种情况有更明显的差异。例如,在第二种情况下,禁止从Car类的const方法中调用Carburetor实例的非const方法...
是否有“规则”来决定使用哪种方法?我有什么遗漏吗?