RTSP的创建过程大致如下: m_pScheduler = new BasicTaskScheduler::createNew(100 * 1000); m_pEnv = new BasicUsageEnvironment::createNew(*m_pScheduler); m_pRtspServer = new RTSPServer::createNew(*m_pEnv, nPort, NULL);
以上三个类构造函数都是protected,通过接口createNew完成对象的创建; 其中RTSPServer和BasicUsageEnvironment两个类的析构函数同样也是protected,所以不能直接delete对象本身。
销毁对象的方式如下: RTSPServer -> RTSPServer::close(*m_pEnv, m_pRtspServer->name()); BasicUsageEnvironment -> m_pEnv->reclaim(); BasicTaskScheduler -> delete m_pScheduler;
==================== 三个类的简短描述 [BasicTaskScheduler]
继承关系: TaskScheduler ? ? ? ?^ ? ? ? ? | ? ? ? ? | BasicTaskScheduler0 ? ? ? ?^ ? ? ? ? | ? ? ? ? | BasicTaskScheduler
BasicTaskScheduler不是Medium继承来的,构造函数时protected,但是析构函数是public的。 ?? ?创建:存在接口createNew ?? ?销毁:因为析构函数是public的,可以直接delete掉 ---------------------------- [BasicUsageEnvironment]
继承关系: UsageEnvironment ? ? ? ?^ ? ? ? ? | ? ? ? ? | BasicUsageEnvironment0 ? ? ? ?^ ? ? ? ? | ? ? ? ? | BasicUsageEnvironment
BasicUsageEnvironment 不是Medium继承来的,构造和析构函数为protected,不能直接进行删除。 ?? ?创建:存在一个接口createNew来创建 ?? ?销毁:通过一个public函数reclaim来实现销毁,前提其自身内部没有管理的Medium对象。 ---------------------------- [RTSPServer]
继承关系: Medium ? ? ? ?^ ? ? ? ? | ? ? ? ? | GenericMediaServer ? ? ? ?^ ? ? ? ? | ? ? ? ? | RTSPServer
RTSPServer的构造和析构函数都是protected ?? ?创建:通过createNew接口进行创建 ?? ?销毁:因为是protected的,所以delete函数不能进行删除。因为继承自Medium类,并且从Medium进行而来的所有类的析构函数都是virtual的。因此通过删除Medium类完成对象RTSPServer的析构。 ?? ??? ?在类Medium中有两个静态接口如下,完成指定environment下的指定mediumName的对象的释放。 ?? ??? ??? ?static void close(UsageEnvironment& env, char const* mediumName); ?? ??? ??? ?static void close(Medium* medium);
|