在一个类中如果有其他的对象作为自己的成员变量,我们经常面临这样的选择,是使用对象指针,还是直接使用对象类型来声明这个变量。
比如下面的Demo
class CVoltageMonitor : public IBasicTask
{
private:
ICache* m_pCache;
IAlarmNotifier* m_pNotifier; // 使用指针对象进行声明
TIMESTAMP m_tsLastIm;//使用对象类型进行声明
TIMESTAMP m_tsLastCheck;
ULONG m_alarmCount;
BOOL m_bStudyActive;
DWORD m_dwExpectedDelta;
public:
CVoltageMonitor(void);
~CVoltageMonitor(void);
BOOL Run(void);
void BeginStudy();
void EndStudy();
private:
void RaiseAlarm(TIMESTAMP Delta);
void CloseAlarm();
void Reset();
};
经过我的总结,我认为下面这三种情况下,可以选择把对象成员定义成指针。
- 多态的情况下,需要使用基类指针
- 和其他的类共享同一个实例化对象,生命周期不确定,当然这种情况,使用智能指针是最好的
- 类对象比较大,在实际项目中,经常有这种情况,多次创建这个类的实例化对象会导致栈空间不足